Javascript jQuery.fn.extend()-无法从用于扩展对象的对象的方法中检索匹配的元素$

Javascript jQuery.fn.extend()-无法从用于扩展对象的对象的方法中检索匹配的元素$,javascript,jquery,Javascript,Jquery,我陷入了以下情况。希望你们能帮忙 如您所见,我通过添加两个方法扩展了jQuery主对象。问题是testApp()方法的this关键字包含对匹配元素集(类为p1的元素)的引用,但函数appName.InitApp()方法的this关键字引用的是appName对象(我知道这是默认行为)。我的问题是如何从appName.InitApp()方法中获得匹配的元素集 $.fn.extend({ appName:(函数(){ “严格使用”; var obj={}; obj.InitApp=函数(){ con

我陷入了以下情况。希望你们能帮忙

如您所见,我通过添加两个方法扩展了jQuery主对象。问题是
testApp()
方法的
this
关键字包含对匹配元素集(类为
p1
的元素)的引用,但函数
appName.InitApp()
方法的
this
关键字引用的是
appName
对象(我知道这是默认行为)。我的问题是如何从
appName.InitApp()
方法中获得匹配的元素集

$.fn.extend({
appName:(函数(){
“严格使用”;
var obj={};
obj.InitApp=函数(){
console.log(“appName”);
console.log(this);
css(“颜色”、“红色”);
};
返回obj;
})(),
testApp:函数(){
console.log(“testApp”);
css(“颜色”、“红色”);
}
});
$(文档).ready(函数(){
$(“.p1”).testApp();
$(“.p2”).appName.InitApp();
});

正文的第一段

正文第二段

正文第三段


正文第四段。

我找到了一个令人满意的问题答案

我发现问题的原因是,在通过附加对象扩展jQuery原型之后,每个新创建的jQuery对象都被扩展对象的方法引用为其所有者对象(如下所示)。在我的例子中,
appName
object只是一个附加到jQuery对象的对象,它的方法并不引用jQuery对象。它们指的是
appName
。因此,我更改了代码以获取jQuery对象

$.fn.extend({
appName:(函数(){
“严格使用”;
var obj={};
var matchedElems=null;
obj.InitApp=函数(){
if(matchedElems!=未定义&&
matchedElems!=null){
console.log(“appName”);
css(“颜色”、“红色”);
}
};
返回函数(){
matchedElems=这个;
返回obj;
};
})(),
testApp:函数(){
console.log(“testApp”);
css(“颜色”、“红色”);
}
});
$(文档).ready(函数(){
$(“.p1”).testApp();
$(“.p2”).appName().InitApp();
});

正文的第一段

正文第二段

正文第三段


正文的第四段。

我不确定您如何理解“this”,因为在您创建返回InitApp变量的方法时,“this”不作为所选元素存在。这就引出了一个问题,你为什么要在那里生活?@Taplar
这个
指的是对象
obj
。我知道你在寻找什么样的最终结果,我以前也见过这种结果,但它需要对jquery的核心方法进行根本性的更改(必须重写)。我无法重新定位执行此操作的代码,但我不建议执行此操作。只需删除appName名称空间,让它成为接受参数的单个方法
$(选择器).appName('initApp')
$(选择器).appName('testApp')
etc基本上每次创建jquery对象时都会对其进行修改(几乎每个jquery筛选方法,$(),.find,.filter,.children,.parents,.closest等)将创建
appName
对象的一个新实例,并将其附加到该对象,其每个方法都绑定到当前选择。这是相当低效的,但它会起作用。不要这样做。