1
var blah = (function(){

    function ret(){

    }

    ret.prototype = Object.create(Object.prototype, { 
        getone: {
            get: function() { return 1; }
        },
        funcstuff: function(){ console.log('funcstuff'); }
    });

    return ret;

})();

var b = new blah();

console.log(b.getone); // 1

b.funcstuff(); // Uncaught TypeError: Property 'funcstuff' 
               // of object #<Object> is not a function 

我想知道使用上面添加funcstuffret原型的正确语法。Object.create()

http://jsfiddle.net/Qy9Vm/

4

2 回答 2

1

我认为正确的语法是:

var blah = (function(){

function ret(){

}

ret.prototype = Object.create(Object.prototype, { 
    getone: {
        get: function() { return 1; }
    },
    funcstuff: { value: function(){ console.log('funcstuff'); } }
    // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
});

return ret;

})();

var b = new blah();

console.log(b.getone); // 1

b.funcstuff();

Object.create()不直接接受函数或属性,它需要一个属性描述符,它本身就是一个对象,具有可以设置的标准属性,例如configurableenumerable...等。

于 2013-10-31T22:58:15.183 回答
1

我想知道使用上面的 Object.create() 将 funcstuff 添加到 ret 原型的正确语法。

由于您赋予Object.create定义属性的对象是属性描述符,因此如果您想funcstuff真正成为一个函数,请将其定义为value描述符中的属性:

ret.prototype = Object.create(Object.prototype, { 
    getone: {
        get: function() { return 1; }
    },
    funcstuff: {                                       // changes
        value: function(){ console.log('funcstuff'); } // changes
    }                                                  // changes
});
于 2013-10-31T23:01:09.730 回答