Javascript指向最后一个对象实例
Javascript this point to last object instance
首先,对不起我的英语不好。
我正在开发的jquery插件的上下文有问题。我在下面创建的每个插件实例,都指向最后一个对象。示例:
var a = $("#a").EscribirConAdjuntos();
var b = $("#b").EscribirConAdjuntos();
var c = $("#c").EscribirConAdjuntos();
结果是a和b修改了c对象,我会试图更好地解释,但我不知道为什么。
如果我做了.setText("文本a"(;它将修改存储在c.中的实例所附加的文本区域
(function(window, $){
var pluginName = 'EscribirConAdjuntos';
if(typeof $ === "undefined")
return console.error('No esta añadida la librería jquery.js');
var defaults = {
btnGuardar : false,
onGuardar : $.noop,
onActualizar : $.noop,
texto : false,
media : false,
};
/* Constructor principal */
var Plugin = function ($el, options){
this.o = $.extend( {}, defaults, options);
this.$.el = $el;
// I add this textarea
this.$.textarea = $('<textarea></textarea>').appendTo(this.$.el);
return this;
};
Plugin.prototype = {
$:{},
setText : function(text){
this.textarea.val(text);
}
/* Some functions */
};
$.fn[pluginName] = function(options, args){
var $this = $(this);
var plugin = $this.data(pluginName);
if(!plugin){
plugin = new Plugin($this, options);
$this.data(pluginName, plugin);
return plugin;
} else {
if(plugin[options] && typeof plugin[options] == 'function')
return plugin[options].apply(plugin,args);
else
return plugin;
}
};
})(window, jQuery);
问题不在于函数的this
值。问题出在Plugin.prototype.$
对象上。Plugin
构造函数的所有实例的$
属性都引用了同一个对象,即当您重置$
对象的el
和textarea
属性的值时,它们将为所有实例重置。
> a === b
false
> a.$ === b.$
true
在构造函数中定义$
属性。
/* Constructor principal */
var Plugin = function ($el, options){
this.o = $.extend( {}, defaults, options);
this.$ = {};
this.$.el = $el;
// I add this textarea
this.$.textarea = $('<textarea></textarea>').appendTo(this.$.el);
return this;
};
Plugin.prototype = {
// $:{},
setText : function(text){
this.$.textarea.val(text);
}
};
相关文章:
- 代码挑战:创建一个跟踪对象实例总数的类Foo
- 用javascript创建另一个对象的实例
- 如何将一个单例传递给另一个对象,使该对象的所有实例都引用同一个单实例
- javascript 函数可以是另一个对象的类和实例吗?
- Javascript:在脚本后附加一个对象,并创建一个本地实例
- 在另一个对象中实例化一个对象
- 在JavaScript中:如果Object是一个函数,那么如果一个函数是一个对象的实例,它怎么可能呢
- 如何在Javascript中实例化一个对象圈
- 如何创建一个对象的多个实例,而不在JavaScript中重用相同的变量名
- 实例化一个对象,使其可以与多个指令共享
- 返回一个对象“;实例“;通过JavaScript异步执行
- 如何静态声明一个属性名(键)包含破折号的Javascript对象实例(关联数组)?
- JavaScript OOP:在一个对象中同时运行两个方法实例
- Canvas对象和另一个对象中的多个实例
- 在getJSON完成之后实例化一个对象
- 如何检查一个对象是否是JavaScript中某一组原型的实例?
- 不能在JavaScript中创建一个对象的两个实例
- 如何使一个对象成为它自己的原型属性的实例
- Javascript指向最后一个对象实例
- 你能在.NET中从JSON实例化一个对象实例吗