0

以下を使用して、名前空間内にプロトタイプを割り当てようとしています (すべてがグローバル オブジェクトにラップされています)。

プロトタイプオブジェクト: {

        Person : function(config){

            var that = this;

            this.name = config.name;
            this.age = config.age;

            console.log(that);

            that.prototype.working = function(){

                console.log(this.name + 'is working');

            };

    },

}、

次に、コンソールでこれを使用して確認しています。

var me = new global.prototypeObjects.Person({name:'Mike', age:'40'});

このエラーが発生します:

TypeError: 未定義のプロパティ 'working' を設定できません

ただし、プロトタイプの割り当てを明示的に行う場合、つまり:

プロトタイプオブジェクト: {

        Person : function(config){

            var that = this;

            this.name = config.name;
            this.age = config.age;

            console.log(that);

            **global.prototypeObjects.Person**.prototype.working = function(){

                console.log(this.name + 'is working');

            };

        }



    },

その後、期待どおりに動作し、次の結果が得られます。

global.prototypeObjects.Person {name: "Mike", age: "40", working: function}

そして me.working() は「Mike is working」をログアウトします

この例で「これ」を使用できない理由を誰か説明できますか?

4

2 に答える 2

1

コンストラクターの本体でプロトタイプ関数を定義し、関数本体の外でプロトタイプ関数を定義する必要があります。

var global={};
global.pototypeObjects= {
   Person : function(config){
     this.name = config.name;
     this.age = config.age;
   }
};
global.pototypeObjects.Person.prototype.working=function(){
  console.log(this.name + " is working");
};
var p = new global.pototypeObjects.Person(
  {name:"jon",age:22}
);
p.working();//jon is working

プロトタイプと継承のセットアップに関する基本的な説明を次に示します。プロトタイプの継承 - 作成

var はクロージャを作成し、これらのオブジェクトは初期化により多くの CPU とより多くのメモリを必要とするため、コンストラクタ関数では使用しない方がよいでしょう。

于 2013-07-02T00:12:03.753 に答える
0

すでにオブジェクトをインスタンス化しているためです。prototypeオブジェクトではなく、クラスに存在します。あなたはただ行うことができます:

this.working = function() {}

それ以外の場合は、コンストラクタの外に移動する必要があります。

于 2013-07-02T00:06:14.307 に答える