理解javascript原型的动态性

function Person(){}
Person.prototype.name = 'sun';

var person1 = new Person();
alert("Person最初原型:"+person1.name);

//第一次重写原型
Person.prototype = {
	constructor : Person,   //显式声明constructor
	name : 'cheng',
	age : 18
};

alert("原型被覆盖后P1:"+person1.name);   //sun
//新实例
var person2 = new Person();
alert("原型覆盖后P2:"+person2.name);   //cheng

alert("最初  :"+ person1.constructor);   //指向Person
alert("覆盖后:"+ person2.constructor);   //指向Person

//第二次覆盖原型
Person.prototype = {
	constructor : Person,
	name : 'ffff',
	age : 18
};

alert("原型覆盖后P1:"+person1.name);   //sun
alert("原型覆盖后p2:"+person2.name);   //cheng
var person3 = new Person();
alert("原型覆盖后p3:"+person3.name);   //fff

以上测试可以看出:

1:原型重写前创建的对象实例,始终指向重写前的prototype

2:原型重写后创建的对象实例,始终指向最新重写的prototype;

3:多个被重写的原型可以同时存在,并且都可以通过constructor与函数对象关联。

总结 ,对象实例中的[[prototype]]指针,始终指向对象实例被创建前最新出现的函数原型,永不改变;

            多个原型可以同时存在,并于函数对象关联;(需要显式声明constructor)


转载于:https://my.oschina.net/dlam/blog/498567

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值