JavaScript-此值
我看到一些: 这是一个向库中添加新插件的例程JavaScript-此值,javascript,this,Javascript,This,我看到一些: 这是一个向库中添加新插件的例程 this在$中指的是什么。扩展(true,this,options)?它是函数本身还是窗口,还是仅在调用时指定 谢谢 更新: 这个问题是一般性的,因为我不理解js中的这个值。经过一些研究,显然: 1.如果使用func()调用,则此将是窗口或未定义(严格模式) 2.如果像foo.funct()一样调用,此引用foo。 对于这个特定的jqplot库,当调用它时,实际上是在$.jqplot上调用的,jqplot是在jquery中添加的。因此,在您的示例中
this
在$中指的是什么。扩展(true,this,options)
?它是函数本身还是窗口,还是仅在调用时指定
谢谢
更新:
这个问题是一般性的,因为我不理解js中的这个值。经过一些研究,显然:
1.如果使用func()调用,则此
将是窗口
或未定义
(严格模式)
2.如果像foo.funct()一样调用,此
引用foo。
对于这个特定的jqplot库,当调用它时,实际上是在$.jqplot
上调用的,jqplot是在jquery中添加的。因此,在您的示例中,$这个
应该指的是$.jqplot
。jqplot.Dragable
是一个构造函数<代码>此
指的是在
new $.jqplot.Dragable(options)
被称为。至于$.extend
,它只需将选项
中的每个方法和属性复制到此
但别担心。首先,您应该了解这是什么。之后,您可以阅读我在aswer底部发布的链接,了解JavaScript中的构造函数和OOP
在javascript中,此
指方法或函数的上下文。此
的值可以有三个方面
全球环境
当简单地按名称或直接变量引用(不是对象属性)执行函数时,此
指向全局范围。在浏览器中,这是窗口
对象
请注意,在严格模式下,此
是未定义的
上面我们有一个函数setFoo
。此函数只需获取一个值并将其设置为This。让我们执行该函数以了解将发生什么
setFoo(10);
在这种情况下,此
指的是全局范围。因此,window.foo
或foo
应等于10
window.foo == 10 //true
foo == 10 //true
对象上下文
当函数作为对象的属性存储时,称为方法。当执行一个方法时,此
将成为该方法所附加的对象。这允许该方法修改和使用对象上的数据
现在让我们将setFoo附加到一个对象上
var myObject = {};
myObject.setFoo = setFoo;
如果我们现在执行myObject,它将有一个名为foo的新属性,它将等于我们传入myObject.setFoo
的值
myObject.setFoo(34);
它应该myObject.foo
等于34,因为此
引用对象myObject
myObject.foo == 34; //true
调用上下文
最后一种设置此的方法是使用函数
原型的方法。这意味着JavaScript中的所有函数和方法都有这些to方法。它们是call
和apply
。这些函数允许程序员在执行函数或方法时设置自定义上下文。这两个参数几乎相同,只是apply将数组作为其第二个参数。数组中的每个项都作为参数按顺序传递给函数/方法
呼叫
应用
您应该阅读有关MDN的这篇
的文章。它将帮助您更好地理解何时使用它,以及为什么它是功能范围的重要部分
您还应该阅读,因为此
的主要目的是在JavaScript中启用OOP(面向对象编程)
在这里,它看起来像是
Dragable
的一个实例,无论jqplot库在调用扩展函数之前选择将其设置为什么。在JS中它不一定是自动的。@ArunPJohny我对JS oop很陌生。。。你是说Dragable是一个构造函数吗?为什么?或者js中的所有函数都可以是构造函数?@Barmar如果它的调用方式是$.jqplot.Dragable(optionObj),那么这个==$.jqplot.Dragable?你可以试试console.log(this)
,它应该会告诉你它是什么…谢谢,非常有用。:)在严格模式下,它不是未定义的吗?
myObject.setFoo(34);
myObject.foo == 34; //true
var x = {};
setFoo.call(x, 20);
x.foo == 20; // true
var x = {};
var args = [20];
setFoo.apply(x, args);
x.foo == 20; // true