鍍金池/ 問答/HTML/ 關(guān)于this指向問題.

關(guān)于this指向問題.

function identify() {
    return this.name.toUpperCase();
}

function sayHello() {
    var greeting = "Hello, I'm " + identify.call( this );//不太理解這一步是把this綁定到sayHello函數(shù)中嘛?
    console.log( greeting );
}
回答
編輯回答
心夠野

call是改變identify的this指向,具體指到誰,還要看你的sayHello方法是怎么被調(diào)用,被誰調(diào)用的,調(diào)用的時(shí)候用沒用call、apply方法。

2017年1月14日 00:28
編輯回答
離夢(mèng)

不是呀,是把sayHello內(nèi)的this綁定給identify。
例如

var a = {name: 'test'}
sayHello.call(a)
// sayHello的this是a,然后又把a(bǔ)作為this綁定給了identify
2017年12月13日 14:18
編輯回答
短嘆

前幾天有位同學(xué)的文章講的很清楚,請(qǐng)參閱:關(guān)于各種This的指向

2018年3月5日 19:38
編輯回答
北城荒

首先,不是,是將this綁定到identify函數(shù)上,然后identify函數(shù)再對(duì)this處理,但這個(gè)this到底是什么要看你如何調(diào)用函數(shù)sayHello了,比如

function identify() {
    return this.name.toUpperCase();
}

function sayHello() {
    var greeting = "Hello, I'm " + identify.call( this );
    console.log( greeting );
}
var obj = { name : "hybg" , sayHello : sayHello };
obj.sayHello();  // Hello, I'm HYBG

window.name = "window";
sayHello();      //Hello, I'm WINDOW

第一種的this指向obj ( 隱式綁定 ),第二種指向window ( 默認(rèn)綁定 ),
this指向什么,完全取決于 什么地方以什么方式調(diào)用,而不是 創(chuàng)建時(shí)this在哪。

更多的綁定方式和源碼解析,可以戳這里js this綁定,如果是不清楚call,apply的工作原理剛剛的鏈接也詳細(xì)介紹了。( 逃

2017年7月7日 10:49
編輯回答
尐潴豬
identify.call( this );

是把當(dāng)前的上下文環(huán)境this傳給identify函數(shù),至于你這個(gè)this指向哪里,沒運(yùn)行無法判斷,
如果你是直接運(yùn)行函數(shù)

sayHello();

那this指向window環(huán)境

如果你是用new 調(diào)用

var obj = new sayHello();

那這個(gè)this指向obj對(duì)象

2017年10月15日 08:04