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

运行上面我收到错误消息

未捕获的类型错误:对象 # 没有方法“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 回答