我正在查看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;
}
任何人都能解释一下这段代码的作用并给我一个例子吗?
答案 0 :(得分:2)
上面的代码只是创建一个新的Shane对象,并将其构造函数设置为Shane,将Prototype设置为Object.prototype。
不完全。对象sha
的原型将是Shane.prototype
。 Shane.prototype
的原型为Object.prototype
。
您提供的功能(更好地命名为new2
,gnu
,knew
或new
的其他变体,因为它是一个语法错误,因为它执行相同的操作语言中new
运算符执行的三个基本操作。
new Shane(arg1, ..., argN)
做这三件事:
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
有关new
和Object.create
的更多信息,请参阅此帖子:here