了解 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
有关 new
和 Object.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.prototype
。 Shane.prototype
的原型将是 Object.prototype
.
您提供的函数(最好命名为 new2
、gnu
、knew
或 new
的其他一些变体,因为它目前是语法错误)执行与语言中的 new
运算符相同的三个基本操作。
new Shane(arg1, ..., argN)
做这三件事:
- 创建一个新的空对象并将其 [[Prototype]] 属性 设置为 Shane.prototype。
- 在新对象的上下文中应用函数
Shane
和参数 arg1
,... argN
,可能接收 return 值。
- 如果收到 return 值,return 那个。如果不是return这个新创建的对象。
new2
函数(我们这样称呼它)做同样的事情。所以你可以这样使用它:
var sha2 = new2(Shane, ["name"]);
并取回与上面 sha
非常相似的内容。
我正在看 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
有关 new
和 Object.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.prototype
。 Shane.prototype
的原型将是 Object.prototype
.
您提供的函数(最好命名为 new2
、gnu
、knew
或 new
的其他一些变体,因为它目前是语法错误)执行与语言中的 new
运算符相同的三个基本操作。
new Shane(arg1, ..., argN)
做这三件事:
- 创建一个新的空对象并将其 [[Prototype]] 属性 设置为 Shane.prototype。
- 在新对象的上下文中应用函数
Shane
和参数arg1
,...argN
,可能接收 return 值。 - 如果收到 return 值,return 那个。如果不是return这个新创建的对象。
new2
函数(我们这样称呼它)做同样的事情。所以你可以这样使用它:
var sha2 = new2(Shane, ["name"]);
并取回与上面 sha
非常相似的内容。