Appearance
原型的动态性
本节目标:理解“原型的动态性”的核心思路,并能把它用于实际开发或面试表达。 由于对属性的访问,是一次实时的搜索过程,因此我们在对原型对象所做任何修改后,所有这个原型对象所属构造函数的创建的实例,即使用是在修改原型前创建的实例,都是实时访问修改后的原型对象。
var friend = new person();
Person.prototype.sayHi = function () {
alert('hi');
};
friend.sayHi();//'hi'注意: 由于调用构造函数创建实例时会为实例添加一个指向最初原型的[[Prototype]]指针; 如果在创建实例后又重写了整个原型对象的话,实例的[[Prototype]]指针依旧指向最初的原型对象。 把原型修改为另外一个对象就等于切断了构造函数与最初原型之间的联系。
function Person() { }
Person.prototype.name = 'Nicholas';
//创建实例
var person1 = new Person();
console.log(person1.name);// Nicholas
//修改原型指向
Person.prototype = { name: 'zhangsan' };
//再创建实例
var person2 = new Person();
console.log(person1.name);// Nicholas
console.log(person2.name);// zhangsan