我看到一些code like this from jqplot library :
$.jqplot.Dragable = function(options) {
// a bunch of code here.
$.extend(true, this, options);
};
这是向库添加新插件的例程。
this
是什么意思?请参阅$.extend(true, this, options)
中的此处?是函数本身还是窗口,还是只有调用时才会指定?
谢谢!
更新:
这个问题本来是一个一般性问题,因为我不明白this
js 中的值。经过一番研究,显然:
1. 如果使用 func() 调用,则this
将是window
或undefined
(严格模式)
2. 如果像foo.funct()那样调用,this
指 foo.
对于这个特定的jqplot库,当它被调用时,它实际上是在$.jqplot
上调用的。 ,其中 jqplot 添加到 jquery.所以this
应引用$.jqplot
最佳答案
在您的示例中 $.jqplot.Dragable
是一个构造函数。 this
指的是创建的对象
new $.jqplot.Dragable(options)
被调用。至于$.extend
,它只是将options
中的每个方法和属性复制到this
上。
但没关系。首先你应该明白this
是什么。之后,您可以阅读我在问题底部发布的链接,以了解 JavaScript 中的构造函数和 OOP。
在 javascript 中,this
指的是方法或函数的上下文。 this
的值可以是三种。
全局背景
当简单地通过名称或直接变量引用(而不是对象属性)执行函数时,this
指向全局范围。在浏览器中,这是 window
对象。
请注意,在严格模式下this
是未定义
function setFoo(val) {
this.foo = val;
}
上面我们有一个函数setFoo
。该函数只需获取一个值并将其设置到 this
上。让我们执行该函数来看看会发生什么......
setFoo(10);
在本例中,this
指的是全局范围。因此,window.foo
或 foo
应等于 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
原型(prototype)的方法。这意味着 JavaScript 中的所有函数和方法都有这些方法。它们是调用
和应用
。这些函数允许程序员在执行函数或方法时设置自定义上下文。两者几乎相同,只是 apply 将数组作为第二个参数。数组中的每个项目都按顺序作为参数传递给函数/方法。
var x = {};
setFoo.call(x, 20);
x.foo == 20; // true
申请
var x = {};
var args = [20];
setFoo.apply(x, args);
x.foo == 20; // true
您应该阅读 MDN 上有关 this
的文章。它将帮助您更好地理解何时使用它,以及为什么它是函数作用域的重要组成部分。
您还应该阅读,因为 this
的主要目的是在 JavaScript 中启用 OOP(面向对象编程)。
关于JavaScript-这个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17037639/