我正在使用jQuery并创建一些OOP Javascript功能。该对象及其构造函数具有以下结构:
var zoomin = new Object();
zoomin = function() { // This is my constructor
this.someFunction();
};
zoomin.prototype = {
someFunction: function() {
// More code here
}
};
当我创建一个zoomin实例时(例如var my_zoom = new zoomin();),构造函数中对this.someFunction()的调用不起作用。似乎jQuery占据了“这个”,这就是为什么它正在破碎。
我非常感谢有关如何使其正常工作的任何帮助。
谢谢!
答案 0 :(得分:3)
你的班级定义应该是这样的:
function zoomin() { // This is my constructor
this.someFunction();
};
对于成员方法定义,它应该是:
zoomin.prototype.someFunction = function() {
// More code here
};
或:
$.extend(zoomin.prototype, {
someFunction : function() {
// More code here
}
});
希望这会有所帮助。干杯
答案 1 :(得分:1)
你的代码很混乱。您正在创建一个新的Object,然后将函数分配给同一个变量。所以第一个语句不是必需的(而不是一个好的做法),然后将对象(带有一些属性)分配给zoomin对象的原型,而不是向它添加属性(someFunction)。
尝试像这样定义你的构造函数:
function zoomin(){
// this is your constructor
}
zoomin.prototype.someFunction = function(){
// this is your method.
}
var zm = new zoomin();
zm.someFunction();
答案 2 :(得分:1)
有关组织此方法的更简洁方法,请参阅其他答案。 这个答案只是试图解决“jQuerying在构造函数中打破'这个'的概念。”
函数对象(例如zoomin
)必须调用new
作为构造函数(构造函数只是函数,那里没有new
)没什么特别的。也就是说,如果zoomin
在jQuery中用作回调函数,那么this
将是一个特定的(但是任意的)对象,它可能不是新的对象实例。这可能会让人觉得jQuery打破了构造函数;但是,它没有,因为构造函数没有用new
调用,因此就像一个“正常函数”。
如果使用new fnObject
,那么this
(在fnOjbect函数内)将始终成为新的“fnObject”实例。有没有办法让jQuery改变它,即使它真的非常努力。
此外,zoomin = new Object
100%无用,因为下一行只是为zoomin
分配一个新值(构造函数 - 对象): - )
快乐的编码。