对象文字作为原型

Dav*_*ker 5 javascript

这个问题更多的是关于支持和向后兼容性.我测试了以下代码.

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)

这是有效的,虽然我没有在任何其他代码中看到对象文字作为原型.是否有一个原因?这似乎是一种合乎逻辑的编码方式,虽然我不想追求它,如果它有严重的陷阱.

Aln*_*tak 2

使用对象文字来创建函数原型是完全正常的,但通常仅作为对象的实际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对象,而不是已创建的实际实例。