为什么'这'与obj.var不同

时间:2014-01-17 18:51:08

标签: javascript jquery jquery-plugins

我目前正在为jQuery编写一个可扩展的插件。您可以看到插件here

我的问题特定于第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)我有this.borderRadius。当我为this.borderRadius设置断点时,它是未定义的。因此,在Chrome Inspector中,我为“this”设置了一个监视表达式,它返回hautD.HautForms。如果我为hautD.HautForms.borderRadius设置了手表检查,则返回的值为“true”。

简而言之:为什么this.borderRadius == undefined hautD.HautForms.borderRadius == true给予this == hautD.HautForms

很抱歉,如果这个问题很复杂,这是我的第一个'真实'插件。

1 个答案:

答案 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
    }
}