0

これは本当に簡単だと思いますが、なぜ次のことがうまくいかないのでしょうか。

var o = function() { };
o.prototype.print = function( ) { console.log("hi") };
o.print(); // console message: Object function o() { } has no method 'print'

ここでフィドル

アップデート

なぜこれもうまくいかないのですか

var o = function() { };
o.prototype.print = function( ) { console.log("hi") };
var c = Object.create( o );
c.print();

必要に応じて、新しい質問を開始できます。

4

3 に答える 3

6

1.質問

これは本当に、本当に簡単だと思いますが、なぜ以下が機能しないのですか。

o は新しいオブジェクトのコンストラクタです。プロトタイプメソッドを使用するには、新しいオブジェクトを作成する必要があります。

var x = new o();
x.print();

2.質問

これも機能しないのはなぜですか

Object.createオブジェクトではなくプロトタイプを取るため:

var o = function() { };
o.prototype.print = function( ) { console.log("hi") };
var c = Object.create( o.prototype );
c.print();

も参照してください

于 2012-11-13T12:11:21.397 に答える
1

oオブジェクトのコンストラクターとして使用する必要があります。このオブジェクトは、のプロトタイプを継承しますo

var o = function() { };
o.prototype.print = function( ) { console.log("hi") };
a = new o(); //a inherits prototype of constructor o
a.print();

同様に、oそれ自体がのインスタンスであるFunctionため、プロトタイプを継承します。var o = function(){}次のように脱糖できるという事実を考慮してください。

var o = new Function (""); //o inherits prototype of constructor Function
于 2012-11-13T12:11:20.603 に答える
0
function MyObject(){ };
var o = new MyObject();
MyObject.prototype.print = function( ) { console.log("hi") };
o.print();
于 2012-11-13T12:16:22.597 に答える