我正在Chrome控制台上尝试以下命令。我可以使用new(下面的第2行)创建对象,但无法使用call。谁能解释原因?
function ObjConstructor(){ this.sample = 1};
let withNew = new ObjConstructor();
let usingCall = ObjConstructor.call({});
usingCall
undefined //output that came on console, this is not a command
withNew
ObjConstructor {sample: 1} //output that came on console
答案 0 :(得分:3)
new
做的几件事包括:
this
值您的代码:
{}
手动创建对象this
将call()
值设置为该对象…但是不做最后一件事。函数中没有return
语句,因此它返回undefined
。
答案 1 :(得分:3)
call
的结果是函数返回的结果。您的ObjConstructor
没有返回任何东西,因此调用它的结果是undefined.
相反,当您使用new
时,将创建一个新对象并将其传递给该函数,除非该函数返回非null
对象,否则将为new
创建该对象是new
表达式的结果。
这就是new
版本有效但call
无效的原因。
还要注意,call
根本不会创建对象。在您的ObjConstructor.call({})
中,创建对象的是{}
,而不是call
。它不会以ObjConstructor.prototype
作为其原型。 ({{}
是原始对象初始化程序,因此对象将以Object.prototype
作为其原型。)
答案 2 :(得分:0)
尝试一下。 或者看看这个-> https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Working_with_Objects
len(max(teststring.split(' '), key=len))