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!谢谢你详尽的回答!