我确保我正确理解了JavaScript的new
和prototype
个关键字,但是我放在一起的一些简单代码并不像我期望的那样。
var ClassA = function() {
return {
shout: function() {
alert("I can shout");
}
};
};
ClassA.prototype.shoutLouder = function() {
alert("I CAN SHOUT");
};
var instance = new ClassA();
instance.shout();
// why not available?
instance.shoutLouder();
当实例变量尝试调用shoutLouder
时,“未捕获的TypeError:instance.shoutLouder不是函数”。
但是,在mozilla docs中,它表示在使用new
创建对象时:
创建一个新对象,继承自Foo.prototype。
我的理解错在哪里?
Here is a jsbin代码为snippit。
答案 0 :(得分:3)
您正在失去对函数(Class')原型对象的访问权限,因为您正在从函数中返回一个新对象:
var ClassA = function() {
return {
shout: function() {
alert("I can shout");
}
};
};
而你应该这样做:
var ClassA = function() {
this.shout = function() {
alert("I can shout");
};
};
这仍然允许您访问原型对象(因此委托链仍然有效),因为new关键字将从Class返回“this”。
答案 1 :(得分:1)
ClassA
返回一个新的不同对象
return {
shout: function() {
alert("I can shout");
}
};
尝试
var ClassA = function() {
this.shout = function() {
alert("I can shout");
};
};
ClassA.prototype.shoutLouder = function() {
alert("I CAN SHOUT");
};
var instance = new ClassA();
instance.shout();
// why not available?
instance.shoutLouder();