Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript-此值_Javascript_This - Fatal编程技术网

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