<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();