在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/HTML/ JavaScript的.call()方法理解

JavaScript的.call()方法理解

今天在理解.call()方法上出現(xiàn)了問題,自己給自己講不明白了...

var obj = {
    name: 'linxin'
}

function func() {
    console.log(this.name);
}

func.call(obj);       // linxin

問題一 : A.call(B),可以理解為A繼承了B嗎?
要是可以的話,
問題二 :下邊這個怎么變成了B繼承A了呢?

var Person1  = function () {
    this.name = 'linxin';
}
var Person2 = function () {
    this.getname = function () {
        console.log(this.name);
    }
    Person1.call(this);
}
var person = new Person2();
person.getname();       // linxin

.call()的A和B要怎么理解 ? 怎么來形容比較好理解一些...現(xiàn)在看的有點腦溢血

回答
編輯回答
避風(fēng)港

不要這樣理解,call 跟繼承沒有關(guān)系。

最簡單的理解,func.call() 僅僅就是"指定了在函數(shù) func 內(nèi)部 this 的值是多少"并執(zhí)行 func。

上面的兩段代碼:

function func () {
  console.log(this.name)
}

var obj = { name: 'linxin' }
func.call(obj) // 執(zhí)行 func,并且 func 里用到 this 的地方,this 的值是 obj

可能第二段代碼里的變量命名讓你覺得有點繼承的感覺,我把它改寫一下你再看看:

function 取名 () {
    this.name = 'linxin';
}
var Person2 = function () {
    this.getname = function () {
        console.log(this.name);
    }
    取名.call(this);
}
var person = new Person2();
person.getname();       // linxin

希望對你有幫助

2018年9月14日 10:34
編輯回答
風(fēng)畔

call和apply的區(qū)別是傳遞參數(shù)的方式不一樣,但作用都是為要執(zhí)行的方法重新綁定一個this,類似用B來調(diào)用A的方法。

2017年11月25日 13:08
編輯回答
六扇門

很好理解,.call() 方法是改變函數(shù)內(nèi)部的 this 指向,在 Person2 中調(diào)用 Person1 時,把 Person1 內(nèi)部的 this 指向修改為 Person2 的 this 了。構(gòu)造繼承。

2017年9月6日 04:58