1. 构造函数原型prototype
构造函数通过原型分配的函数是所有对象所共享的。
JavaScript 规定,每一个构造函数都有一个prototype
属性,指向另一个对象。注意这个prototype
就是一个对象,这个对象的所有属性和方法,都会被构造函数所拥有。
我们可以把那些不变的方法,直接定义在prototype
对象上,这样所有对象的实例就可以共享这些方法。
function Star(uname, age) {
this.uname = uname;
this.age = age;
}
Star.prototype.do = function() {
console.log('我会打篮球');
}
var usr1 = new Star('Jack', 18);
var usr2 = new Star('Tom', 19);
usr1.do(); // 我会打篮球
usr2.do(); // 我会打篮球
2. 对象原型
对象都会有一个属性__proto__
指向构造函数的prototype
原型对象,之所以我们对象可以使用构造函数prototype
原型对象的属性和方法,就是因为对象有__proto__
原型的存在。
__proto__
对象原型和原型对象prototype
是等价的。
__proto__
对象原型的意义就在于为对象的查找机制提供一个方向,或者说一条路线,但是它是一个非标准属性,因此实际开发中,不可以使用这个属性,它只是内部指向原型对象prototype
。
function Star(uname, age) {
this.uname = uname;
this.age = age;
}
Star.prototype.do = function() {
console.log('我会打篮球');
}
var usr1 = new Star('Jack', 18);
usr1.do(); // 我会打篮球
console.log(usr1.__proto__ == Star.prototype); // true