javaScript中的原型解析(第2页)
0 次下载 页 4755 字【 字体:大 中 小 】
function Person(){} var girl=new Person(); Person.prototype={ first_name:"guo", hair_color:"black", city:"zhengzhou", act:function(){alert("eatting");} }; var boy=new Person(); Person.prototype.hobby="basketball"; alert(boy.hobby); //basketball alert(girl.first_name); //undefined
再回到“屏蔽”这一问题上,我们前面了解到了创建实例对象的属性(与原型对象中的某一属性重名)会屏蔽掉原型对象的该属性,但不影响其他实例对象。这里有一个错误,这个情况只适用于基本数据类型,当属性的值引用类型时,会出现一个大问题,看如下代码。
function Person(){} Person.prototype={ first_name:"guo", hair_color:"black", friends:["Nick","John"], city:"zhengzhou", act:function(){alert("eatting");} }; var boy=new Person(); boy.friends.push("Mike"); var girl=new Person(); alert(boy.friends); //Nick,John,Mike alert(girl.friends); //Nick,John,MIke
可见,上面这句话不适用了,原因是friends是存在于原型对象中的,而不是boy中,所以他的修改会影响到这个环境。(我们可以通过boy.frindes=[]来创建一个boy实例的属性)那么,我们就需要引入组合使用构造函数模式与原型模式。
function Person(hair_color,city){ this.hair_color=hair_color; this.city=city; this.friends=["John","Nick"]; } Person.prototype={ constructor:Person, first_name:"guo", act:function() { alert("eatting"); } }; var boy=new Person("black","zhengzhou"); var girl=new Person("red","shenyang"); boy.friends.push("Nick"); alert(girl.friends); alert(boy.friends);
该模式是目前ECMAScript中使用最广泛,认同最高的创建自定义类型的方法,甚至可以作为一种默认模式。
但是对于从事其他面向对象语言的程序员来说,这样的模式显得很怪异,为了将所有的信息都封装到构造函数中,动态原型模式出现了。动态模式主要是通过一个if语句来判断是否需要对原型对象进行初始化,以达到节省资源的目的。
此外还有稳妥构造模式,是为了适应没有共享属性和不使用this的情况。
以上这篇javaScript中的原型解析(第2页)【推荐】就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。

QT理解JavaScript原型
如何分类服装制版中的原型-服装制版中的原型的分类方法
javaScript中的原型解析(第2页)
JavaScript之强大的原型和原型链
深入解析开放式影视传播实验室管理模式内涵
浅议影视动画表演的创作流程
论小学生思想品德的养成教育
小学数学中几何图形的概念教学探析
浅析公益广告和商业广告的目标分野
在全区深入开展警示教育剖析会上的发言
语文教师开展阅读教学的方法
高职学生职业生涯规划指导体系实施方案探讨
哈姆雷特的经典优秀台词
哈姆雷特的经典台词
莎士比亚哈姆雷特名言
哈姆雷特语录
对TCP/IP网络协议的深入浅出归纳
对中小企业薪酬管理的问题剖析
电影文学对当下电影的思考论文
李安电影中父亲形象的剖析