prototype:原型对象
每个函数都一个prototype属性,
每一个对象(null除外)在创建的时候就会与之关联另一个对象,
这个对象就是我们所说的原型,每一个对象都会从原型"继承"属性。
但如果对象自己重写了属性,那么就会采用新的属性值
代码展示:
// 构造函数
function Person() {
}
// prototype是函数才会有的属性
Person.prototype.name = 'Kevin';
// 创建对象
var person1 = new Person();
var person2 = new Person();
// 对象会继承原型中的属性
console.log(person1.name) // Kevin
console.log(person2.name) // Kevin
-
在原型中创建了属性name
-
创建了对象后没有定义任何属性。
-
通过读取name,还是可以获取值,也就是原型中name的值
-
因此原型自身是一个对象, 可以用来存放实例对象的共有属性值,或者默认属性
-
目的是减少不必要的内存消耗
proto:获取自己的原型
每一个对象都有的属性,会指向这个对象的原型。
存放的是原型的地址。
function Person() {
}
var person = new Person();
console.log(person.__proto__ === Person.prototype); // true
原型构造器
每个原型都有一个 constructor 属性指向关联的构造函数 实例原型指向构造函数
function Person() {
}
console.log(Person === Person.prototype.constructor); // true