JavaScript中神奇的call()方法
更新時間:2015年03月12日 10:28:41 投稿:junjie
這篇文章主要介紹了JavaScript中神奇的call()方法,本文用淺顯的語言幫助你加深理解call()方法,需要的朋友可以參考下
先看看關于call()的官方解釋,“調(diào)用一個對象的一個方法,以另一個對象替換當前對象?!?,看了這樣的解釋,或許讓你更摸不著頭腦了??蠢樱?br />
復制代碼 代碼如下:
var x = "我是全局變量"; //定義全局變量x
function a(){ //定義函數(shù)類結(jié)構(gòu)a
this.x = "我是在函數(shù)類結(jié)構(gòu)a中聲明的哦";
}
//定義普通函數(shù),彈出當前指針所包含的變量x的值
function f(){
alert (this.x);
}
//返回值為“我是在函數(shù)類結(jié)構(gòu)a中聲明的哦”
f.call(new a());
我的理解是,f.call(new a())就是把函數(shù)(其實也是對象)f復制到被調(diào)用對象“new a()”下面去解析,事實上和下面這段代碼的解析結(jié)果一樣:
復制代碼 代碼如下:
function a(){
this.x = "我是在函數(shù)類結(jié)構(gòu)a中聲明的哦";
alert(this.x);
}
a();
只不過此時變量X的作用域不同而已,咿…看起來好像有點繼承的味道哦,難道不是嗎?在上例中,f完全被構(gòu)造函數(shù)a的實力對象繼承了,如果說這還不足以說明a.call(b)是一種繼承模式,那么再看一個更具有繼承味道的用法吧。
復制代碼 代碼如下:
function f(){
this.a ="a";
this.b = function(){
alert("b");
}
}
function e(){
f.call(this);
}
var c = new e();
alert(c.a); //彈出a
c.b(); //彈出b
在這個例子中,只要會使用瀏覽器的朋友,都能看得出來e完全繼承了f的屬性和方法,否則是無法解釋的,因為在e中并沒有定義屬性a和b,那么按常理推斷在e的實例對象c中,并不會出現(xiàn)這兩個屬性。
您可能感興趣的文章:
- 小議Function.apply()之二------利用Apply的參數(shù)數(shù)組化來提高 JavaScript程序性能
- JS面向?qū)ο?、prototype、call()、apply()
- JavaScript中的apply()方法和call()方法使用介紹
- 基于JavaScript實現(xiàn)繼承機制之調(diào)用call()與apply()的方法詳解
- JavaScript中的prototype.bind()方法介紹
- angularJS中$apply()方法詳解
- Javascript中的apply()方法淺析
- 淺談javascript的call()、apply()、bind()的用法
相關文章
bootstrap基本配置_動力節(jié)點Java學院整理
這篇文章主要介紹了bootstrap基本配置,詳細講解如何下載并安裝 Bootstrap,討論 Bootstrap 文件結(jié)構(gòu),并通過一個實例演示它的用法。2017-07-07