0
<html>
<body>
<script type="text/javascript">

    MyClass = function (id) {
    }

    MyClass.prototype.myFunc1 = function () {
        alert("myFunc1");
    }

    MyClass.prototype = {
        myFunc2:function () {
            alert("myFunc2");
        }
    }
    var myInstance = new MyClass({});
    myInstance.myFunc1();
</script>
</body>
</html>
​

上記を実行すると、エラーメッセージが表示されます

キャッチされていない TypeError: オブジェクト # にはメソッド 'myFunc1' がありません

myFunc2 を完全に削除すると、エラー メッセージは消えます。ここで何が起きてるの?

4

4 に答える 4

4

新しいオブジェクトを割り当ててプロトタイプをオーバーライドしたため、エラーが発生しましたmyFunc1

次のいずれかを行います。

MyClass.prototype.myFunc1 = function() {...}
MyClass.prototype.myFunc2 = function() {...}

また

MyClass.prototype = {
    myFunc1: function() {...},
    myFunc2: function() {...}
}
于 2012-04-14T09:09:32.183 に答える
4

まず、 を追加してオブジェクトのプロトタイプを変更しますmyFunc1。次に、プロトタイプを新しいものに完全に置き換えると、 が削除されmyFunc1ます。

ステートメントを交換するだけでよいので、それ.prototype = ...が最初になります。次に、が定義されているプロトタイプにmyFunc1追加されます。myFunc2

于 2012-04-14T09:09:44.813 に答える
1

これがデモ(コンソールを見る)と簡単な説明です

var MyClass = function(id) {}

//here you are adding to the prototype object
MyClass.prototype.myFunc1 = function() {
    alert("myFunc1");
}

//here, you replaced the whole prototype object with another object
MyClass.prototype = {
    myFunc2: function() {
        alert("myFunc2");
    }
}
于 2012-04-14T09:10:26.817 に答える
0

これを試してみてください...それは働いています。

MyClass = function (id) {
}

MyClass.prototype = {
    myFunc2: function () {
        alert("myFunc2");
    }
}

MyClass.prototype.myFunc1 = function () {
    alert("myFunc1");
}

var myInstance = new MyClass({});
myInstance.myFunc1();
于 2012-04-14T10:09:11.113 に答える