码迷,mamicode.com
首页 > 编程语言 > 详细

理解javascript原型的动态性

时间:2015-08-28 13:45:17      阅读:270      评论:0      收藏:0      [点我收藏+]

标签:

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)


理解javascript原型的动态性

标签:

原文地址:http://my.oschina.net/dlam/blog/498567

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!