论坛首页 Web前端技术论坛

javaScript中的new

浏览 4285 次
精华帖 (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的方式.

   发表时间:2008-02-27  
po.prototype.age ="super prototype age";
相当于
class po{
    public static age="super prototype age";
}
0 请登录后投票
   发表时间:2008-02-28  
楼上,这个东西是不好“相当”的。原型是有链的。static可没有。
简单说,原型机制是一种求取默认值的机制。
0 请登录后投票
   发表时间: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

你怎么也没睡啊 这么"早"了

0 请登录后投票
   发表时间: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;
0 请登录后投票
   发表时间:2008-02-28  
js的继承是个烦人的事情,我个人不是很喜欢ext这样构造一个临时类的做法。
0 请登录后投票
   发表时间:2008-03-04  
看看这种
http://dean.edwards.name/weblog/2006/03/base/
0 请登录后投票
   发表时间:2008-03-04  
dean的base当然是不错的。Prototype原来想用base的,不过现在还是用了另外一种。它那个也不错,看上去挺爽。见:http://hax.iteye.com/blog/167131。只是我看了它的实现之后,见到它为了达到语法接近传统OO语言,而做了许多簿记,确实付出了一些性能代价。
0 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics