javaScript中的原型解析(第2页)
本文共计4755个字,预计阅读时长16分钟。【 字体:大 中 小 】
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页)【推荐】就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。


经济管理创新研究论文
化学分析仪器在环保水质检测方面的应用
分析化学在陶瓷原材料检测方面的应用及举例
秦腔的来源和发展
HACMP的历史和发展
象棋的变化和发展
试析我国内衣的发展趋势毕业论文
EDA技术的发展与应用
IP在EDA技术的应用和发展中的意义
探究计算机技术的发展和应用论文
EDA的应用和发展趋势
电子采购的应用和发展
工程施工中材料价格风险的控制与管理论文
浅谈塑木材料在园林景观工程中的应用的论文
相变材料对轻质建筑室内热环境的改善论文
材料语言在室内空间设计中的应用论文
水利水电工程混凝土材料成本优化研究论文
浅析影视动画在教育教学中有效应用研究论文
高分子材料简历模板
生活中的高分子材料