2012-04-14 55 views
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> 
​ 

运行上面我得到错误信息为什么我的JavaScript对象看不到以下方法?

遗漏的类型错误:对象#有没有方法“myFunc1”

如果我删除myfunc2所完全错误消息消失。这里发生了什么?

+0

请考虑标记其中一个答案为已接受。 – 2015-10-21 14:04:27

回答

4

出现错误是因为您通过向其分配新对象来覆盖原型 - 因此,您正在摆脱myFunc1

请执行:

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

OR

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

首先,你加入myFunc1更改对象的原型。然后你完全用新的替换原型,并删除myFunc1

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

1

Here's a demo(看控制台)和简单的解释

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

试试这个......这是工作。

MyClass = function (id) { 
} 

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

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

var myInstance = new MyClass({}); 
myInstance.myFunc1(); 
相关问题