Javascript 将新运算符应用于Shape.call(o)
我试图通过Javascript 将新运算符应用于Shape.call(o),javascript,Javascript,我试图通过call属性调用函数。考虑下面的代码 function Shape(){ this.x=0; this.y=0; } var o={p:'p'}; new Shape.call(o); 我有个错误 [03:02:19.124] TypeError: Shape.call is not a constructor @ http://fiddle.jshell.net/_display/:40 但是,在将new操作符应用于Shape.call(o)之后,将创建一个空对象
call
属性调用函数。考虑下面的代码
function Shape(){
this.x=0;
this.y=0;
}
var o={p:'p'};
new Shape.call(o);
我有个错误
[03:02:19.124] TypeError: Shape.call is not a constructor @ http://fiddle.jshell.net/_display/:40
但是,在将new
操作符应用于Shape.call(o)
之后,将创建一个空对象。进一步的这个
将指示o
和执行后的Shape.call(o)
我们得到了o={p:'p',x=0,y=0}
alert(typeof (Shape.call));//function
我的问题是:
为什么
new
运算符不能应用于形状。调用(o)
如果只想将函数应用于对象,则不必使用new
。只需做Shape。调用(o)
如果您希望o
也继承自Shape.prototype
,那么您无论如何都不能走这条路。没有标准的方法来更改现有对象的原型。您可以将o
作为参数传递给Shape
并复制属性,或者使用对象。创建:
var o = Object.create(Shape.prototype);
o.p = 'p';
Shape.call(o);
为什么我不能在这种情况下使用new
newshape.call(o)
的计算结果为(newshape.call)(o)
。如果操作数(Shape.call
)没有内部[[Constructor]]
属性:
如果构造函数没有实现[[Construct]]
内部方法,则抛出TypeError
异常
通常每个函数都有此内部属性,但:
除非在特定函数的说明中另有规定,否则本条中描述的非构造函数的内置函数均不得实现[[Construct]]]
内部方法
是一个内置函数,不是构造函数,因此没有[[Construct]]
属性。@Felix Kling我重复一下我感兴趣的内容。为什么我不能在这种情况下使用new?你没问这个。将很快更新我的答案。@Felix Kling我更新了我的postAwesome!谢谢你详尽的回答!