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

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

问题描述:

我正在使用jQuery并创建一些OOP Javascript功能。对象和它的构造具有以下结构:jQuery在构造函数中打破“this”?

var zoomin = new Object(); 
zoomin = function() { // This is my constructor 
    this.someFunction(); 
}; 

zoomin.prototype = { 
    someFunction: function() { 
     // More code here 
    } 
}; 

当我创建zoomin的一个实例(如VAR my_zoom =新zoomin()),在构造函数中调用this.someFunction()不工作。看起来jQuery已经占据了“这个”,这就是为什么它正在崩溃。

我真的很感激任何关于如何让这个工作正常的帮助。

谢谢!

+1

看来你有这个答案的另一个问题:http://*.com/questions/5852560/applying-oop-with-jquery。 – 2011-05-07 17:50:46

+5

每当你使用'new Object()'时,上帝就会杀死一个名叫Brendan Eich的人。 – sdleihssirhc 2011-05-07 17:52:21

+1

你的代码中没有任何与jQuery相关的东西。发布一个完整的(但最小的)例子,包括jQuery代码。 – interjay 2011-05-07 17:56:27

您的类定义应该是这样的:

function zoomin() { // This is my constructor 
    this.someFunction(); 
}; 

对于成员方法定义的,它应该是:

zoomin.prototype.someFunction = function() { 
    // More code here 
}; 

或者:

$.extend(zoomin.prototype, { 
    someFunction : function() { 
     // More code here 
    } 
}); 

希望这会有所帮助。干杯

你的代码相当混乱。你正在创建一个新的对象,然后将函数分配给同一个变量。所以第一条语句并不是必须的(也不是一个好习惯),然后将对象(包含一些属性)分配给缩放对象的原型,而不是向其添加属性(someFunction)。

尝试这样定义构造函数:

function zoomin(){ 
// this is your constructor 
} 
zoomin.prototype.someFunction = function(){ 
// this is your method. 
} 

var zm = new zoomin(); 
zm.someFunction(); 

查看其他答案,以更清洁的方式来组织这一点。 这个答案只是试图解决“构造函数中的”jQuerying打破'这个'的概念。

甲功能对象(例如zoomin必须new调用充当构造(构造只是功能,没有什么特别的不new)。也就是说,如果在jQuery中使用zoomin作为回调函数,那么this将是一个特定的(但是任意的)对象,它可能不是新的对象实例。这可能会导致jQuery打破构造函数的错觉;然而,它没有,因为构造函数没有被new调用,因此就像一个“正常函数”。

如果使用new fnObject然后this(该fnOjbect函数内)将总是是一个新的 “fnObject” 实例。还有没办法让jQuery改变这一点,即使它真的很努力,真的很难。

另外,zoomin = new Object为100%无用的,因为下一行只是分配一个新的值(构造函数对象),以zoomin :-)

编码愉快。