jQuery在构造函数中打破“this”?

时间:2011-05-07 17:46:54

标签: javascript jquery oop

我正在使用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占据了“这个”,这就是为什么它正在破碎。

我非常感谢有关如何使其正常工作的任何帮助。

谢谢!

3 个答案:

答案 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分配一个新值(构造函数 - 对象): - )

快乐的编码。