ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScript 関数における this の 4 つのバインディング形式

function fire () {
console.log(this === window)
}
fire(); // 输出truefunction fire () {
// 我是被定义在函数内部的函数哦! function innerFire() {
console.log(this === window)
}
innerFire(); // 独立函数调用}
fire(); // 输出true

2. 関数のオブジェクトからの独立性、this の配信損失の問題 var obj = {
a: 1, // a是定义在对象obj中的属性 1 fire: function () {
console.log(this.a)
}
}
var a = 2; // a是定义在全局环境中的变量 2var fireInGrobal = obj.fire;
fireInGrobal(); // 输出 2
var a = 2;var obj = {
a: 1, // a是定义在对象obj中的属性 fire: function () {
console.log(this.a)
}
}
function otherFire (fn) {
fn();
}
otherFire(obj.fire); // 输出2
var obj = {
a: 1,
obj2: {
a: 2,
obj3: {
a:3,
getA: function () {
console.log(this.a)
}
}
}
}
obj.obj2.obj3.getA(); // 输出3

var obj = {
a: 1, // a是定义在对象obj中的属性 fire: function () {
console.log(this.a)
}
}
var a = 2; // a是定义在全局环境中的变量 var fireInGrobal = obj.fire;
fireInGrobal(); // 输出2fireInGrobal.call(obj); // 输出1
var obj = {
a: 1, // a是定义在对象obj中的属性 fire: function () {
console.log(this.a)
}
}
var a = 2; // a是定义在全局环境中的变量 var fn = obj.fire;var fireInGrobal = function () {
fn.call(obj) //硬绑定}
fireInGrobal(); // 输出1
var fireInGrobal = function () {
fn.call(obj) //硬绑定}
var fireInGrobal = fn.bind(obj);


function foo (a) { this.a = a;
}
var a1 = new foo (1);var a2 = new foo (2);var a3 = new foo (3);var a4 = new foo (4);
console.log(a1.a); // 输出1console.log(a2.a); // 输出2console.log(a3.a); // 输出3console.log(a4.a); // 输出4
相关推荐:
以上がJavaScript 関数における this の 4 つのバインディング形式の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。