在您的示例$.jqplot.Dragable
中是一个构造函数。this
指的是什么时候创建的对象
new $.jqplot.Dragable(options)
叫做。至于$.extend
,它只是将每个方法和属性从options
复制 到this
。
但没关系。首先你应该明白什么this
是。之后,您可以阅读我在我的 aswer 底部发布的链接,以了解 JavaScript 中的构造函数和 OOP。
在 javascriptthis
中是指方法或函数的上下文。的值this
可以是三件事。
全球背景
当简单地通过名称或直接变量引用(不是对象属性)执行函数时,this
指向全局范围。在浏览器中,这是window
对象。
请注意,在严格模式下this
是undefined
function setFoo(val) {
this.foo = val;
}
上面我们有一个函数setFoo
。这个函数只是接受一个值并将其设置为this
。让我们执行这个函数来看看会发生什么......
setFoo(10);
在这种情况下,this
指的是全局范围。因此,window.foo
orfoo
应该等于 10。
window.foo == 10 //true
foo == 10 //true
对象上下文
当函数存储为对象的属性时,它被称为方法。当一个方法被执行时,它就this
变成了该方法所附加的对象。这允许该方法修改和使用对象上的数据。
现在让我们将 setFoo 附加到一个对象上。
var myObject = {};
myObject.setFoo = setFoo;
如果我们现在执行 myObject 将有一个名为 foo 的新属性,它将等于我们传入的任何内容myObject.setFoo
。
myObject.setFoo(34);
因为它应该myObject.foo
等于 34 因为this
是指对象myObject
。
myObject.foo == 34; //true
调用上下文
this
可以设置的最后一种方式是使用Function
原型的方法。这意味着 JavaScript 中的所有函数和方法都有这些 to 方法。它们是call
和apply
。这些函数允许程序员在执行函数或方法时设置自定义上下文。两者几乎相同,只是 apply 将数组作为其第二个参数。数组中的每一项都按顺序作为参数传递给函数/方法。
称呼
var x = {};
setFoo.call(x, 20);
x.foo == 20; // true
申请
var x = {};
var args = [20];
setFoo.apply(x, args);
x.foo == 20; // true
您应该阅读this
MDN 上的文章。它将帮助您更好地理解何时使用它,以及为什么它是函数范围的重要部分。
MDN - 这个
您还应该阅读,因为它的主要目的this
是在 JavaScript 中启用 OOP(面向对象编程)。
MDN - 继承和原型链