为什么我的 JavaScript 对象看不到以下方法


<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>
​

运行上述操作,我收到错误消息

未捕获的类型错误:对象 # 没有方法"myFunc1"

如果我完全删除myFunc2,错误消息就会消失。 这是怎么回事?

有一个错误,因为您通过为其分配一个新对象来覆盖原型 - 因此您摆脱了myFunc1

执行以下任一操作:

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

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

首先,通过添加myFunc1来更改对象的原型。然后你用一个新的完全替换原型,这消除了myFunc1.

您可以只交换语句,以便.prototype = ...先行。然后myFunc1将被添加到定义myFunc2的原型中。

这是一个演示(观看控制台)和简单的解释

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");
    }
}

试试这个...它正在工作。

MyClass = function (id) {
}
MyClass.prototype = {
    myFunc2: function () {
        alert("myFunc2");
    }
}
MyClass.prototype.myFunc1 = function () {
    alert("myFunc1");
}
var myInstance = new MyClass({});
myInstance.myFunc1();

最新更新