0

私はJavascriptとプログラミング全般の初心者です。私の英語は上手ではありません(文法エラーがあれば申し訳ありません)が、これは私の問題です:

JS でクラスを作成し、そのオブジェクトの属性を設定する関数を作成すると、ブラウザーがその関数を認識しません。例:

var myObject = new MyClass();
myObject.setAttribute();

function MyClass() {
    this.attribute;
}

MyClass.prototype.setAttribute = function() {
    this.attribute = true;
};

このコードを実行しようとすると、クロムは「Uncaught TypeError: Object # has no method 'setAtributte'」というエラーをスローし、指定された行は 2 です。わかりません。

繰り返しますが、私は初心者なので、これはばかげたエラーのように見えるかもしれませんが、私にとっては非常に大きな問題です。ありがとう。

4

2 に答える 2

2

MyClassJavaScript は変数宣言の前に定義されるように宣言を「巻き上げ」ました。ただし、プロトタイプの更新は巻き上げられません。コードの順序を変更する

function MyClass() {
    this.attribute;
}

// Prototype has to be defined BEFORE it can be used
MyClass.prototype.setAttribute = function() {
    this.attribute = true;
    console.log(this.attribute);
};

var myObject = new MyClass();
myObject.setAttribute();
于 2013-11-05T01:33:03.907 に答える
0

構文で宣言された関数はfunction name() {}一番上に持ち上げられるため、コードで定義される前に関数を呼び出すことができますが、他のすべての行には当てはまりません。

コードは基本的に次のように評価されます。

var MyClass = function MyClass() {
    this.attribute;
}

var myObject = new MyClass();

myObject.setAttribute(); //does not exist since it's defined on the line below

MyClass.prototype.setAttribute = function() {
    this.attribute = true;
};

コードを次のように並べ替える必要があります。

//constructor declaration
//setting prototype values

var myObject = new MyClass();
myObject.setAttribute('test');
于 2013-11-05T01:35:22.660 に答える