这个对象始终是js中的一个坑产品。很难决定什么是指,我们经常犯这样的错误归咎于C++或Python自身的经验。接下来,对这个对象的所有权的详细说明。

法则一:全球环境

Javascript的环境是由函数决定的。在js中,上下文不能被代码块分隔开。不由函数包装的环境是全局环境。全局环境中的这一点将指向全局变量窗口。让我们看下面的例子。

复制代码代码如下所示:

变量名= 'jjj;

console.log(这个名字);

成功 / /输出JJJ



法则二:为这当方法被称为

很明显,这是一个很好的判断,与Python中的自我一致,这无疑指向了调用方法的对象。

复制代码代码如下所示:

var用户{

名称:'kkk

};

用户。getName =函数(){

console.log(这个名字);

};

User.getName();

KKK / 输出/



规则3:作为构造函数

那时,这不需要说太多。它明显指向新创建的对象。构造函数的操作实际上没有创建对象,只是初始化,并且在运行之前创建对象。

下面是一个例子

复制代码代码如下所示:

函数用户(名称){

这个名字=名字;

}

VaR F1 =新用户('kkk);

VaR F2 =用户('kkk);

console.log(F1。名称); / / KKK

console.log(F2。名称); / /定义没有名称属性



这一规则4:间接调用

所谓间接调用指的是应用程序和调用调用函数,当这指向参数列表中的第一个参数时。

复制代码代码如下所示:

VaR setName =功能(name){

这个名字=名字;

};

var用户=级别:2 };

User.apply(集名称,'jjj);

console.log(用户名称); / /问



规则5:这在其他情况下

记住,在其他情况下这不会改变,这是最容易犯错误的地方。

复制代码代码如下所示:

聪明的编码器;

var

名称:foocoder

你好:函数(某物){

VaR方法sayHello =功能(某物){

console.log(this.name + 某事);

};

Sayhello(某物);

}

}

person.hello(Hello World); / /聪明的程序员说你好世界



上面的代码看起来很奇怪。这不应该指向人吗

我们应该记住,嵌套函数中的这个函数不指向嵌套函数。在这种情况下,这跟不点对应于你好的功能。如果我们改变例如一点点

复制代码代码如下所示:

你好:函数(某物){

console.log(this.name + 某事);

}

/ / foocoder说你好世界



你应该已经看到了,在这个时候,打招呼是不被作为一种方法,所以这一点对全局对象。

这一次问题来了,用节点运行的原始例子会显示未定义的Hello World,我不知道是否有一个大的神来解释它。

第六:eval破坏了所有的规则

以一个例子结束

复制代码代码如下所示:

聪明的编码器;

var用户{

名称:'kkk

};

用户。getName =函数(){

console.log(这个名字);

};

无功得到= user.getname;

获取();



你明白吗