我目前正在为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
。
很抱歉,如果这个问题很复杂,这是我的第一个'真实'插件。
答案 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
}
}