gpt4 book ai didi

javascript - 为什么我的自定义对象似乎不存在我的公共(public)方法?

转载 作者:行者123 更新时间:2023-11-28 02:20:30 25 4
gpt4 key购买 nike

我一直在试图找出为什么我的自定义 jQuery 插件对象似乎不存在我的公共(public)方法。

我创建了一个简化版本的 jQuery 插件,其中包含一个私有(private)变量和两个用于访问/修改私有(private)变量的公共(public)方法。我上网查了一下,结果不太清楚,或者说我的搜索能力太差了。

它一直说“TypeError:myObject.getMyValue不是一个函数”,有人知道我做错了什么,或者有更好的方法的建议吗?

基本对象类如下,但可以在 jsFiddle 链接上找到正确的代码示例。

(function ($) {

var MyClass = function (element) {

var myValue = 'Hello World';

this.getMyValue = function() {
return myValue;
};

this.setMyValue = function(value) {
myValue = value;
};

return this;
};

$.fn.myPlugin = function() {
return this.each(function(key, value){
if ($(this).data('myclass')) {
return $(this).data('myclass');
}

var instance = new MyClass(this);
$(this).data('myclass', instance);
return instance;
});
};

})(jQuery);

var myObject = $('#test').myPlugin();

alert(myObject.getMyValue());
myObject.setMyValue('Goodbye World');
alert(myObject.getMyValue());

http://jsfiddle.net/hZExb/4/

最佳答案

因为您要返回 this.each() 的结果,即 this。在 this.each() 之外创建一个变量,并在 this.each 完成后返回该变量。

jsFiddle

$.fn.myPlugin = function() {
var instance;
this.each(function(key, value){
if ($(this).data('myclass')) {
return $(this).data('myclass');
}

instance = new MyClass(this);
$(this).data('myclass', instance);
});
return instance;
};
<小时/>

如果你想返回 MyClass 的数组,如果你的 jQuery 对象是一个集合,你可以这样做:

jsFiddle

$.fn.myPlugin = function() {
var instances = [];
this.each(function(key, value){
if ($(this).data('myclass')) {
return $(this).data('myclass');
}

var instance = new MyClass(this);
$(this).data('myclass', instance);
instances.push(instance);
});
if (instances.length == 1)
return instances[0];
return instances;
};

关于javascript - 为什么我的自定义对象似乎不存在我的公共(public)方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15731355/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com