2014-01-17 49 views
0
不同

我目前正在为jQuery编写一个可扩展的插件。你可以看到插件here为什么'this'与obj.var

我的问题是特定于线37和96:

// Creates a Namespace 
hautD = {}; 

// A Basic Dropdown Constructor function 
hautD.HautForms = function(el, options) { 
    // Overwrite default options 
    // with user provided ones 
    // and merge them into "options". 
    var options = $.extend({}, defaults, options); 
    if (el) { 
     this.init(el, options); 
    } 
} 

switch(options.cornerType){ 
    default: 
    // default = 'rounded' 
    if(this.borderRadius){ 
     alert('woo hoo'); 
    } 
    break 
} 

source)其中,I有this.borderRadius。当我为this.borderRadius设置断点时,它是未定义的。因此,在Chrome Inspector中,我为“this”设置了一个监视表达式,并返回hautD.HautForms。如果我为hautD.HautForms.borderRadius设置了手表检查,则返回值为'true'。

总而言之:为什么是this.borderRadius == undefinedhautD.HautForms.borderRadius == true给出this == hautD.HautForms

对不起,如果这个问题很复杂,这是我第一个'真正'的插件。

+6

你应该在您的问题中包含代码的相关部分,而不仅仅是链接到源代码。它将在链接有一天死去的情况下提供参考。 – mccainz

+0

谢谢你的提示:) –

回答

0

这是在方法中用于指在其上调用

用于内部类对象访问成员变量的方法的 对象的特殊关键字。

否则,您可以通过公共方法/变量从外部访问您的对象。

在代码中,你使用这个正确的位置:

this.init(el, options); 

,因为它是 hautD.HautForms操作

您的代码应该是这样的:

hautD.HautForms = function(el, options) { 
    // Overwrite default options 
    // with user provided ones 
    // and merge them into "options". 
    var options = $.extend({}, defaults, options); 
    if (el) { 
     this.init(el, options); 
    } 

    switch(options.cornerType) { 
     // here you can use this.borderRadius instead of hautD.HautForms.borderRadius from outside 
    } 
} 
+0

我理解这个概念,但是如果'this'返回对象,为什么this.var不会和object.var一样? –

+0

,因为你不在相同的范围内 –

+0

好吧,这对我来说更有意义,你提供的代码可以做我想做的。谢谢!当它允许我的时候,我会接受答案。 –

相关问题