javascript创建对象(二)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript创建对象(二),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2698字,纯文字阅读大概需要4分钟。
内容图文
![javascript创建对象(二)](/upload/InfoBanner/zyjiaocheng/1109/a1bed1b4cdf3469f998336a519beafb8.jpg)
原型模式:每创建一个函数都有一个prototype属性,它是一个指针,指向一个对象;
原型模式创建函数的方式:
1 function Movie(){ 2 3 }; 4 Movie.prototype.name="Interstellar"; 5 Movie.prototype.year=2014; 6 Movie.prototype.country="American"; 7 Movie.prototype.playMovie=function(){ 8 alert(this.name); 9} 1011var movie1=new Movie(); 12 movie1.playMovie();//Interstellar;13var movie2=new Movie(); 14 movie2.playMovie();//Interstellar;1516 alert(movie1.playMovie==movie2.playMovie);//true 有别于构造函数
对象字面量的方式
1 function Movie(){ 2 3 }; 4 Movie.prototype={ 5 name:"Interstellar", 6 year:2014, 7 country:"American", 8 playMovie:function(){ 9 alert(this.name); 10} 11} 12//这种方式原型对象的contructor属性不会指向Movie了,而是指向Object了。
每当代码读取某个属性时,都会先搜索对象实例本身,没有就继续搜索指针指向的原型对象,如果有就结束;通过hasOwnProperty()可以检测属性是存在实例中还是原型中:
1 function Movie(){ 2 }; 3 Movie.prototype.name="FleetOfTime"; 4 Movie.prototype.year=2014; 5 Movie.prototype.country="China"; 6 Movie.prototype.playMovie=function(){ 7 alert(this.name); 8} 9var movie1=new Movie(); 10 alert(movie1.hasOwnProperty("name"));//原型上的 false11 movie1.name="xxxx"; 12 alert(movie1.hasOwnProperty("name"));//覆盖了原型上的,变成实例上的了 true
原型的动态性:对原型对象所做的任何修改都能够立即从实例中反映出来,例:
1 var movie=new Movie(); 2 Movie.prototype.playOne=function(){ 3 alert("One"); 4}; 5 movie.playOne();//"One"67//给Movie原型对象添加了一个方法
但是如果是重写整个原型对象的话,那么就等于切断了构造函数与最初原型之间的联系了:
1 function Movie(){ 2 3 } 4 5 var movie=new Moive(); 6//重写原型对象 7 Movie.prototype={ 8 constructor:Movie,//对象字面量方式强制指向Movie,本来指向Object 9 name:"xxx", 10 year:2012, 11 country:"xxxx", 12 sayName:function(){} 13} 14//这时候调用sayName()方法会出错15 movie.sayName();//error
原型对象的问题:对于包含引用类型值的属性来说,就有很大问题了,如下例子
1 function Movie(){ 2 } 3 Movie.prototype={ 4 constructor:Movie, 5 name:"xxx", 6 year:2014, 7 place:["China","Japan"], 8 playName:function(){ 9 alert(this.name); 10} 11} 12var movie1=new Movie(); 13var movie2=new Movie(); 1415 movie1.place.push("korea"); 1617 alert(movie1.place)//"China,Japan,Korea"1819 alert(movie2.place)//"China,Japan,Korea"2021//这里本来是想只改变movie1的place,结果也改到了movie2的
最好的创建对象方式:构造函数来定义实例属性,原型模式来定义方法和共享属性;
1 function Movie(name,year,country){ 2 this.name=name; 3this.year=year; 4this.country=country 5this.place=["China","Japan"]; 6} 7 Movie.prototype={ 8 constructor:Movie, 9 playName:function(){ 10 alert(this.name); 11} 12} 1314var movie1=new Movie("Interstellar",2014,"American"); 15var movie2=new Movie("FleetOfTime",2014,"China"); 16 movie1.place.push("Korea"); 17 alert(movie1.place);//"China,Japan,Korea"18 alert(movie2.place);//"China,Japan"1920 alert(movie1.place==movie2.place);//false21 alert(movie1.playName==movie2.playName);//true
原文:http://www.cnblogs.com/zoujking/p/4162681.html
内容总结
以上是互联网集市为您收集整理的javascript创建对象(二)全部内容,希望文章能够帮你解决javascript创建对象(二)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。