了解 JavaScript 中的新运算符

Understanding the new operator in JavaScript

我正在看 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;
}

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

这里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 的更多信息,请参阅此 post:here

The above code just creates a new Shane object and sets its constructor to Shane and Prototype to Object.prototype.

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

您提供的函数(最好命名为 new2gnuknewnew 的其他一些变体,因为它目前是语法错误)执行与语言中的 new 运算符相同的三个基本操作。

new Shane(arg1, ..., argN)

做这三件事:

  • 创建一个新的空对象并将其 [[Prototype]] 属性 设置为 Shane.prototype。
  • 在新对象的上下文中应用函数 Shane 和参数 arg1,... argN,可能接收 return 值。
  • 如果收到 return 值,return 那个。如果不是return这个新创建的对象。

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

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

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