浏览 4315 次
锁定老帖子 主题:javaScript中的new
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-02-23
function po(){ /// this.age ="super age"; } po.prototype.age ="super prototype age"; function func() { //this.age='name has been changed.'; } //func.prototype.age='prototype of func'; func.prototype = new po(); var f = new func(); alert(f.age); // 输出super prototype age alert(func.prototype.age); // 输出super prototype age 这段代码会弹出两次super prototype age,原因如下: 对象寻找属性时,如果自己没有这个属性,会在构造函数的propotype所指向/引用的对象中找,看能否找到同名属性,如果构造函数的prototype没有还会找prototype对象的构造函数的prototype对象, 如果找到,就会读取它的值并返回.(这个过程会持续向上,直到持续到Object对象为止,即所谓原型方式的继承). 注意:以上是读,如果写一个属性的话就是直接给这个对象定义了一个属性,读写不对等,在<javascript权威指南> 有很好说明. 本贴内容来自于<领悟 JavaScript 中的面向对象>. to robbin : 由于yiding_he写道"注:读完本文后请务必接着看完所有回复!"这样对于想要得到其中重要内容的读者来说太花时间了,所以我把几位网友(yiding_he,xieye,afcn0)的观点总结了一下,用于方便想要知道javaScript中的new的含义的新读者.也希望javaeye能够上一套wiki,方便大家对知识进行系统总结.论坛这种需要看完所有回帖才能得到知识的方式还是比不了wiki的方式. 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-02-27
po.prototype.age ="super prototype age";
相当于 class po{ public static age="super prototype age"; } |
|
返回顶楼 | |
发表时间:2008-02-28
楼上,这个东西是不好“相当”的。原型是有链的。static可没有。
简单说,原型机制是一种求取默认值的机制。 |
|
返回顶楼 | |
发表时间:2008-02-28
Hafeyang 写道 po.prototype.age ="super prototype age";
相当于 class po{ public static age="super prototype age"; } 完全错误. 如果非要拿java做比较的话 那么 static是不需要new po 也能被访问的 但是 楼主的js里 po一定要 new一个 之后才会有age属性的 不管怎么说 两者都不能用"相当于" 他们连"约等于"都算不上 to hax 你怎么也没睡啊 这么"早"了 |
|
返回顶楼 | |
发表时间:2008-02-28
ext中继承的做法避免了,子类在继承父类时复制原型链而多调用一次父类构造函数的问题,解决如下:
var superclass=function() {alert(1);} //父类 var tempclass=function() {}; //临时用于复制父类prototype链的类 tempclass.prototype=uperclass.prototype; //复制prototype链 var subclass = function() { superclass.apply(this,arguments); alert(2); } subclass=new tempclass(); //这里不但继承了原型链又避免了new父类 subclass.prototype.constructor=subclass; |
|
返回顶楼 | |
发表时间:2008-02-28
js的继承是个烦人的事情,我个人不是很喜欢ext这样构造一个临时类的做法。
|
|
返回顶楼 | |
发表时间:2008-03-04
看看这种
http://dean.edwards.name/weblog/2006/03/base/ |
|
返回顶楼 | |
发表时间:2008-03-04
dean的base当然是不错的。Prototype原来想用base的,不过现在还是用了另外一种。它那个也不错,看上去挺爽。见:http://hax.iteye.com/blog/167131。只是我看了它的实现之后,见到它为了达到语法接近传统OO语言,而做了许多簿记,确实付出了一些性能代价。
|
|
返回顶楼 | |