<script type="text/javascript">
var c1=function(){this.name="xw1";}
var c2=function(){this.name="xw2";}
c2.prototype=new c1();
var o2=new c2();
alert(o2.constructor);//c1
</script>js权威指南上 只是说可以通过c2.prototype.construction=c2;来改回constructor属性
但是我还是弄不明白,c2.prototype=new c1(); 这句到底做了些什么......
var c1=function(){this.name="xw1";}
var c2=function(){this.name="xw2";}
c2.prototype=new c1();
var o2=new c2();
alert(o2.constructor);//c1
</script>js权威指南上 只是说可以通过c2.prototype.construction=c2;来改回constructor属性
但是我还是弄不明白,c2.prototype=new c1(); 这句到底做了些什么......
解决方案 »
- js中的 if (val[1]===this.undefined) 和 if (val[1]== "yes") 中的 三个等于 和 两个等于有什么区别?
- javascript nobjid.attributes.getNamedItem('id')
- JavaScript可以操作浏览器的缓冲区吗?
- 帮帮菜鸟
- 现在有多少种非IE内核的浏览器种类?
- 如何用javascript控制text的style???
- 请问如何用js,保存页面刷新前的值
- 关于刷新的小问题
- js如何取得另一网页传来的参数,并在网页上显示,帮忙!送分!
- 用jsp实现input循环,实现对每条消息都能评论,但是只能对最新一条消息评论
- 关于多页面调用时钟显示功能的问题
- 菜鸟提问 ‘i’为空或不是对象 哪错了,求大神
每个类型的prototype都包含有constructor属性,该属性用于当用该类型生成一个对象时确定用哪个constructor来初始化该对象,有点象面向对象的构造器。
c2.prototype=new c1();这句话就是改变了c2的prototype,这样就改变了c2类型所指向的constroctor。而通过原型链来获得c1的constroctor。
至于什么是原型链,其概念不是三言两语讲得清楚。
建议看下下面的两篇文章,一篇看完看另外一篇,有点复杂。。
http://www.csser.com/dev/52.html
http://www.cnblogs.com/RicCC/archive/2008/02/15/JavaScript-Object-Model-Execution-Model.html
var c2=function(){this.name="xw2";}
c2.prototype=new c1();
var o2=new c2();
console.log(o2.hasOwnProperty('constructor'));//false
console.log(o2.__proto__.hasOwnProperty('constructor'))//o2.__proto__指的是new c1();
console.log(o2.__proto__.__proto__.hasOwnProperty('constructor'));//true
alert(o2.constructor);//其实o2.constructor是延其原型链一直找到o2.__proto__.__proto__才找到的,而并非o2对象自身的属性
c2.prototype=new c1();//这句话修改了c2原型链中的constructor
//单纯的function里没有constructor属性,
//o2.constructor其实是在o2的原型链中找constructor属性,
//c2.prototype.constructor原本应该是c2的,
//但是c2.prototype=new c1();这句话修改了c2原型链中的constructor,使其指向了c1
//所以最后一句alert(o2.constructor);会再c2原型链中找到已经指向c1的constructor
//当执行c2.prototype.construction=c2的时候,变会使原型链中的constructor重新指向c2