this

您所在的位置:网站首页 java的this关键字的作用 this

this

2023-10-24 21:21| 来源: 网络整理| 查看: 265

当函数作为对象里的方法被调用时,this 被设置为调用该函数的对象。

下面的例子中,当 o.f() 被调用时,函数内的 this 将绑定到 o 对象。

js

var o = { prop: 37, f: function () { return this.prop; }, }; console.log(o.f()); // 37

请注意,这样的行为完全不会受函数定义方式或位置的影响。在前面的例子中,我们在定义对象o的同时,将其中的函数定义为成员 f 。但是,我们也可以先定义函数,然后再将其附属到o.f。这样做的结果是一样的:

js

var o = { prop: 37 }; function independent() { return this.prop; } o.f = independent; console.log(o.f()); // 37

这表明函数是从 o 的 f 成员调用的才是重点。

同样,this 的绑定只受最接近的成员引用的影响。在下面的这个例子中,我们把一个方法g当作对象o.b的函数调用。在这次执行期间,函数中的this将指向o.b。事实证明,这与他是对象 o 的成员没有多大关系,最近的引用才是最重要的。

js

o.b = { g: independent, prop: 42 }; console.log(o.b.g()); // 42 原型链中的 this

对于在对象原型链上某处定义的方法,同样的概念也适用。如果该方法存在于一个对象的原型链上,那么 this 指向的是调用这个方法的对象,就像该方法就在这个对象上一样。

js

var o = { f: function () { return this.a + this.b; }, }; var p = Object.create(o); p.a = 1; p.b = 4; console.log(p.f()); // 5

在这个例子中,对象 p 没有属于它自己的 f 属性,它的 f 属性继承自它的原型。虽然最终是在 o 中找到 f 属性的,这并没有关系;查找过程首先从 p.f 的引用开始,所以函数中的 this 指向p。也就是说,因为f是作为p的方法调用的,所以它的this指向了p。这是 JavaScript 的原型继承中的一个有趣的特性。

getter 与 setter 中的 this

再次,相同的概念也适用于当函数在一个 getter 或者 setter 中被调用。用作 getter 或 setter 的函数都会把 this 绑定到设置或获取属性的对象。

js

function sum() { return this.a + this.b + this.c; } var o = { a: 1, b: 2, c: 3, get average() { return (this.a + this.b + this.c) / 3; }, }; Object.defineProperty(o, "sum", { get: sum, enumerable: true, configurable: true, }); console.log(o.average, o.sum); // logs 2, 6


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3