我在jQuery中创建了一个原型样式函数,例如:
// Check if $Example's width/height is completely in a container:
$('#Example').elementWithinBounderiesOf( $('#Container') );
在这些函数中,我可以使用this
或$(this)
作为我们调用函数的对象,我理解并得到它,但是:
我们如何命名/致电/标签/推荐the element on which we called the function on
?
我需要这个用于文档目的:
// elementWithinBounderiesOf($container) - Check if [NAME NEEDED] fits within $container
// Input: [NAME NEEDED] - the object we're gonna check if it fits in $container
// $container - the container which should contain the [NAME NEEDED]
// Output: Boolean true/false wether or not the [NAME NEEDED] fits within $container
$.fn.elementWithinBounderiesOf = function ($container) {
// $(this) is in this example $('#Example'), but could be any other object
// How do we call this selected object *here, within the function*?
// The name for object-on-which-we-activated-the-function (but that's quite a long name)
}
注1: 这是一个示例,我不需要特定于此案例的名称。
注2: 我不需要知道如何在函数中传递变量,或者引用,或者任何函数,我只需要正在寻找object on which the function is activated
答案 0 :(得分:1)
this
和$(this)
都引用了调用该方法的元素,因此在您的情况下$('#Example')
。 this
引用jQuery对象,$(this)
引用jQuery包装器。
如果您想在原型中保留上下文,请查看以下问题:Preserving a reference to "this" in JavaScript prototype functions
为了保留上下文,bind方法非常有用,现在就是这样 最近发布的ECMAScript第5版规范的一部分, 这个函数的实现很简单(只有8行):
// The .bind method from Prototype.js
if (!Function.prototype.bind) { // check if native implementation available
Function.prototype.bind = function(){
var fn = this, args = Array.prototype.slice.call(arguments),
object = args.shift();
return function(){
return fn.apply(object,
args.concat(Array.prototype.slice.call(arguments)));
};
};
}
MyClass.prototype.myfunc = function() {
this.element.click((function() {
// ...
}).bind(this));
};
答案 1 :(得分:0)
我称之为 jQuery对象,或者 jQuery-wrapped元素非常清楚。这些是jQuery docs中使用的术语。
答案 2 :(得分:-1)
如此测试案例所示:
$.fn.example = function example () {
alert(this === myobject);
};
var myobject = $("div");
myobject.example();

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
&#13;
this
是调用该方法的jQuery对象。
由于$(some_jquery_object)
创建了一个新的jQuery对象,其成员与作为参数传入的成员具有相同的成员,因此$(this)
将是一个不同但相同的jQuery对象。