原型 prototype
- 定义:原型是function对象的是一个属性,它定义了构造函数制造出的对象的公共祖先。通过该构造函数产生的对象,可以继承该原型的属性和方法。原型也是对象。
构造函数的区别:命名大驼峰式
function Person() {
//代码
}
var person = new Person(); //构造函数产生一个对象
//构造函数多次调用,可产生多个相似且独立的对象。
var person1 = new Person();
···
- 利用原型的特点和概念,可以提取共有属性。
//构造函数
function Person(name, age) {
this.name = name;
this.age = age;
}
// 提取原型中相同的属性和方法。
Person.prototype = {
height : 180,
weight : 200,
say : function() {
console.log("abcd")
}
}
// 调用构造函数
var person1 = new Person("abc", 18);
var person2 = new Person("cba", 28);
- 对象如何查看原型
隐式属性__proto__
每一个对象都有一个隐式的属性,__proto__
,且__proto__
都指向对象的原型prototype
![](https://img.haomeiwen.com/i13226023/37fbdbf9f0f2856f.png)
__proto__
是可修改的,可修改对象指向的原型
function Person() {
}
var obj = {
name: "abc"
}
var person = new Person(); //
person.__proto__ = obj; //修改person方法原型指向
console.log(person.name) //abc
- 对象如何查看对象的构造函数
constructor
function Person() {
}
function Car() {
}
var car = new Car();
car.constructor = Person()
原型链
增、删、改、查
子孙无法修改父级原型的属性
Grandpa.prototype.lastName = "Tim";
function Grandpa() {
}
var grandpa = new Grandpa();
Father.prototype = grandpa;
function Father() {
}
var father = new Father();
Son.prototype = father;
function Son() {
}
var son = new Son();
原型链的最顶端指向Object.prototype
call
/apply
改变this
指向
相同点:
call()
,apply()
的第一个参数都是改变this指向。
不同点:
call()
需要把实参按照形参的个数传进去。
function Person(name, age) {
this.name = name;
this.age = age;
}
var person = new Person("Tim",20);
function Student() {
Person.call(this, "Tom",10)
}
var student = new Student()
apply()
需要传一个arguments
数组
function Person(name, age) {
this.name = name;
this.age = age;
}
var person = new Person("Tim",20);
function Student() {
Person.apply(this, ["Tom",10])
}
var student = new Student()
JavaScript可正常计算范围,小数点前16位,后16位。
网友评论