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 

funcstuff上記を使用してretプロトタイプに追加するための正しい構文を知りたい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() を使用して ret プロトタイプに funcstuff を追加するための正しい構文を知りたいです。

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 に答える