Javascript 为什么是';这';与obj.var不同
我目前正在为jQuery编写一个可扩展插件。你可以看到插件 我的问题是针对第37行和第96行的:Javascript 为什么是';这';与obj.var不同,javascript,jquery,jquery-plugins,Javascript,Jquery,Jquery Plugins,我目前正在为jQuery编写一个可扩展插件。你可以看到插件 我的问题是针对第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
// 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
}
()其中我有这个.borderRadius
。当我为这个.borderRadius设置断点时,它是未定义的。因此,在Chrome Inspector中,我为“this”设置了一个watch表达式,它返回hautD.HautForms。如果我为hautD.HautForms.borderRadius
设置了监视检查,则返回值为“true”
简而言之:为什么this.borderRadius==undefined
而hautD.HautForms.borderRadius==true
给定this==hautD.HautForms
对不起,如果这个问题很复杂,这是我第一个真正的插件
这是一个特殊的关键字,在方法中用于引用
对其调用方法的对象
此用于类对象内部访问成员变量
否则,您可以通过公共方法/变量从外部访问对象
在您的代码中,您可以在以下位置正确使用:
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
}
}
您应该在问题中包含代码的相关部分,而不仅仅是链接到源代码。如果链接有一天消失,它将提供一个引用。谢谢你的提示:)我理解这个概念,但是如果“this”返回对象,为什么this.var与object.var不一样?因为你不在同一个范围内好吧,这对我来说更有意义,你提供的代码符合我的要求。谢谢我会在它允许的时候接受答案。@Matthew:注意,
options
仍然不在switch
语句的范围内。您是否打算将switch
语句放在构造函数中?这对我来说似乎更有意义,然后这个也会起作用。@Felix-是的,我明白你的意思了。将开关移到构造函数中更有意义。然后我假设我会以Justin让我访问borderRadius变量的方式访问这些选项。谢谢你的建议。