所以,让我说我有这样的功能
(function($){
$.fn.test = function(opts){
var _object = $(this),
_opts = $.extend({}, $.fn.test.defaults, opts),
_callback = _opts.objects[1].callback
/* some code here */
_callback() /* calling for a callback */
}
$.fn.test.defaults = {
/* not that important for now */
}
})
这是我如何初始化该功能
$('.element').test({
option: 0, /* not important */
variable: 1, /* not important */
objects: [
{
"object" : ".element2",
"callback" : false
},
{
"object" : ".element3", /* THIS IS OBJECT № 2 */
"callback" : function(){
/* >>> {THIS PART} <<< */
console.log (this)
}
},
]
所以在 {THIS PART} 它只返回对象№2的数据,但我希望回调函数在 _object 元素上运行$ .fn.test 所以它会输出 $(&#39; .element&#39;)的数据。我无法对其进行硬编码,而且只能console.log (this)
console.log ($('.element'))
而不是_callback() /* calling for a callback */
- 因为我正在尝试制作更具动态性的功能。因此,我需要将此替换为我的 _object 元素,此时它正在呼叫回调{{1}}。我绝对不能使用替换,因为它不是字符串,但我有一个想法将函数转换为字符串,改变我需要的东西然后转换为函数 - 但这听起来像是不合适的解决方案。
你有什么想法吗?你能提出什么建议?
提前谢谢。
答案 0 :(得分:1)
我不确定我是否理解正确但如果您想获得$ .fn.test范围,您可以尝试这样的事情:
$.fn.test = function(opts){
var _object = $(this),
_opts = $.extend({}, $.fn.test.defaults, opts),
_callback = _opts.objects[1].callback;
_callback(this);
}
和
$('.element').test({
option: 0,
variable: 1,
objects: [
{
"object": ".element2",
"callback": false
},
{
"object": ".element3",
"callback" : function(parentScope){
console.log(parentScope);
}
},
]
});
答案 1 :(得分:1)
注意,如果正确解释问题,要求在_object = $(this)
this
将console.log (this)
作为_callback
返回?
尝试
(function($){
$.fn.test = function(opts){
var _object = $(this),
_opts = $.extend({}, $.fn.test.defaults, opts),
_callback = _opts.objects[1].callback;
/* some code here */
// call `_object` as `this` at `_callback`
_callback.call(_object) /* calling for a callback */
$.fn.test.defaults = {
/* not that important for now */
}
}
}(jQuery));
请参阅Function.prototype.call(),Function.prototype.apply(),Function.prototype.bind()
(function($){
$.fn.test = function(opts){
var _object = $(this),
_opts = $.extend({}, $.fn.test.defaults, opts),
_callback = _opts.objects[1].callback;
/* some code here */
// call `_object` as `this` at `_callback`
_callback.call(_object) /* calling for a callback */
$.fn.test.defaults = {
/* not that important for now */
}
}
}(jQuery));
$('html').test({
objects: [
{
"object" : ".element2",
"callback" : false
},
{
"object" : ".element3", /* THIS IS OBJECT № 2 */
"callback" : function(){
/* >>> {THIS PART} <<< */
console.log(this);
$(this).find("body").append(this[0].tagName)
}
},
]
})
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
&#13;