请问javscript的new问题?
new a()
new Array()谁能说说新建对象步骤?
[小弟我买的是javascript权威指南,就是画的是犀牛的书,第五版的]
犀牛说:new运算符用来创建一个新的对象,并调用构造函数初始化它,new是一个一元运算符,出现在构造函数的调用之前.
运算符new首先创建一个新对象,该对象的属性都未被定义,接下来,它将调用特定的构造函数,传递指定的参数,此外还要把新创建的对象传递给关键字this,这样构造函数就可以使用关键字this来初始化新对象,第一句var s=new a()第一步:new 先创建一个空对象,空对象就是没有任何属性.第二步:调用a()构造函数第三步:将第一步创建的空对象传递给this!(注:具体不知道他是怎么传递的,谁能解释解释?).第四步:构造函数使用this来初始化新对象!(注:谁能详细解释解释构造函数是怎么使用this来初始化新对象的?)第五步:返回对象给变量svar a=new Array()这句也是构造函数用this来初始化新对象的.Array()这个构造函数会返回一个object数组对象,由typeof(Array())得知的.那么构造函数先返回数组对象,然后数组对象是怎么用this来初始化新对象的,谁能详细解释一下.

解决方案 »

  1.   

    Javascript 的 function 本身就是 constructor 定义类不用 class关键字
      

  2.   

    既然本身就是构造函数,this就是直接用的。
      

  3.   

    楼主可以参考一下:http://www.jslab.org.cn/?tag=prototypeChain
    <script type="text/javascript">/*
       new操作原理(spiderMonkey引擎下测试)
    */var a = function(sA,sH){
        var x = "x";
        this.a = sA;
        this.h = sH;
        this.say = function(){alert(this.a+','+x)}
    }
    a.prototype.hi = function(){alert(this.h)}var createInstance = function(source){
        var p = {}
        var args = Array.prototype.slice.call(arguments,1);
        source.apply(p,args);
        p.__proto__ = source.prototype;
        return p;
    }var A = createInstance(a,"A","hi A");
    A.say();
    A.hi();</script>