这个问题更多的是关于支持和向后兼容性.我测试了以下代码.
function newFunc() {}
newFunc.prototype = {
literal : {
init : function() {
console.log(this);
this.test();
},
test : function() {
console.log('test');
}
}
}
var inst = new newFunc();
inst.literal.init();
Run Code Online (Sandbox Code Playgroud)
这是有效的,虽然我没有在任何其他代码中看到对象文字作为原型.是否有一个原因?这似乎是一种合乎逻辑的编码方式,虽然我不想追求它,如果它有严重的陷阱.
使用对象文字来创建函数原型是完全正常的,但通常仅作为对象的实际prototype值。
不寻常的是做你已经做过的事情,并在原型中包含一个嵌套对象。
实际上,您只向原型添加了一个literal对象,即名为 的对象。所有方法都是该对象的属性。它在技术上是有效的语法,但我以前从未见过它被使用过。正如 @squint 在评论中指出的那样,它似乎也破坏了变量的工作方式this,因为它绑定this到函数调用中使用的“左下一个”属性:
var inst = new newFunc();
inst.literal.init();
> Object { init: function, test: function }
Run Code Online (Sandbox Code Playgroud)
iethis已被设置为指向.literal对象,而不是已创建的实际实例。
| 归档时间: |
|
| 查看次数: |
246 次 |
| 最近记录: |