了解JavaScript中的新运算符

时间:2015-01-16 03:52:35

标签: javascript oop

我正在查看Douglas Crockford系列中new运算符的代码。

function Shane(name){
    this.name = name;    
}

var sha = new Shane("name");
console.log(sha);

上面的代码只是创建一个新的Shane对象,并将其构造函数设置为Shane,将Prototype设置为Object.prototype:

function new(func, args){
     var that = Object.create(func.prototype); 
         result = func.apply(that, args);
     return (typeof result==='object' && result) || that;
}

任何人都能解释一下这段代码的作用并给我一个例子吗?

2 个答案:

答案 0 :(得分:2)

  

上面的代码只是创建一个新的Shane对象,并将其构造函数设置为Shane,将Prototype设置为Object.prototype。

不完全。对象sha的原型将是Shane.prototypeShane.prototype的原型为Object.prototype

您提供的功能(更好地命名为new2gnuknewnew的其他变体,因为它是一个语法错误,因为它执行相同的操作语言中new运算符执行的三个基本操作。

new Shane(arg1, ..., argN)

做这三件事:

  • 创建一个新的空对象并将其[[Prototype]]属性设置为Shane.prototype。
  • 在新对象的上下文中应用函数Shane和参数arg1,... argN,可能会收到返回值。
  • 如果收到返回值,则返回该值。如果没有返回这个新创建的对象。

new2函数(让我们称它)做同样的事情。所以你可以像这样使用它:

var sha2 = new2(Shane, ["name"]);

并取回与上述sha非常相似的内容。

答案 1 :(得分:1)

此处new Shane("name")相当于:new1 (Shane,['name']);

function Shane(name){
        this.name = name;    
    }

var sha= new1 (Shane,['name']);
        console.log(sha);
        function new1(func, args){
            console.log(func,args);
             var that = Object.create(func.prototype);
 //creates an object based on func if func=null then created object  doesn't inherit from anything,
                 result = func.apply(that, args);//applys arguments which should be an array
             return (typeof result==='object' && result) || that;
// if result is received and is object then return result else return that which is newly created object
        }

here `Object.create` builds an object that inherits directly from the one passed as its first argument.

请阅读此处的申请:here

有关newObject.create的更多信息,请参阅此帖子:here