Tho*_*ing 87 javascript constructor new-operator
除了this使用new关键字调用构造函数之外,Javascript中的return语句可以返回一个值的具体情况是什么?
例:
function Foo () {
return something;
}
var foo = new Foo ();
Run Code Online (Sandbox Code Playgroud)
如果我没有弄错,if something是非函数原语,this将被返回.否则something返回.它是否正确?
IOW,可以something采取什么样的价值观(new Foo () instanceof Foo) === false?
CMS*_*CMS 157
[[Construct]]内部属性描述了确切的条件,new运算符使用该属性:
来自ECMA-262 3rd.版本规格:
13.2.2
[[Construct]]调用对象的
[[Construct]]属性时,将执行以下步骤:FunctionF
- 创建一个新的本机ECMAScript对象.
- 设置
[[Class]]属性Result(1)为"Object".- 获取原型属性的值
F.- 如果
Result(3)是对象,请将[[Prototype]]属性设置Result(1)为Result(3).- 如果
Result(3)不是对象,请按照15.2.3.1中的描述将[[Prototype]]属性设置Result(1)为原始Object原型对象.- 调用
[[Call]]属性F,提供Result(1)作为this值并提供[[Construct]]作为参数值传入的参数列表.- 如果
Type(Result(6))是,Object那么返回Result(6).- 返回
Result(1).查看步骤7和8,仅当
Result(6)(F构造函数返回的值)的类型不是 Object 时才返回新对象.