国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

Javascript中的call()方法介紹

2024-05-06 16:16:51
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了Javascript中的call()方法介紹,本文講解了Call() 語法、Call() 參數、Javascript中的call()方法、Call()方法的實例等內容,需要的朋友可以參考下
 

在Mozilla的官網中對于call()的介紹是:

復制代碼代碼如下:

call() 方法在使用一個指定的this值和若干個指定的參數值的前提下調用某個函數或方法.

Call() 語法
復制代碼代碼如下:

fun.call(thisArg[, arg1[, arg2[, ...]]])

 

Call() 參數

thisArg

復制代碼代碼如下:

在fun函數運行時指定的this值。需要注意的是,指定的this值并不一定是該函數執行時真正的this值,如果這個函數處于非嚴格模式下,則指定為null和undefined的this值會自動指向全局對象(瀏覽器中就是window對象),同時值為原始值(數字,字符串,布爾值)的this會指向該原始值的自動包裝對象。

arg1, arg2, ...
復制代碼代碼如下:

指定的參數列表。

 

Javascript中的call()方法

先不關注上面那些復雜的解釋,一步步地開始這個過程。

Call()方法的實例

于是寫了另外一個Hello,World:

復制代碼代碼如下:

function print(p1, p2) {
    console.log( p1 + ' ' + p2);
}
print("Hello", "World");
print.call(undefined, "Hello", "World");

兩種方式有同樣的輸出結果,然而,相比之下call方法還傳進了一個undefined。

 

接著,我們再來看另外一個例子。

復制代碼代碼如下:

var obj=function(){};
function print(p1, p2) {
    console.log( p1 + ' ' + p2);
}

 

print.call(obj, "Hello", "World");

 

只是在這里,我們傳進去的還是一個undefined,因為上一個例子中的undefined是因為需要傳進一個參數。這里并沒有真正體現call的用法,看看一個更好的例子。

復制代碼代碼如下:

function print(name) {
    console.log( this.p1 + ' ' + this.p2);
}

 

var h={p1:"hello", p2:"world", print:print};
h.print("fd");

var h2={p1:"hello", p2:"world"};
print.call(h2, "nothing");

 

call就用就是借用別人的方法、對象來調用,就像調用自己的一樣。在h.print,當將函數作為方法調用時,this將指向相關的對象。只是在這個例子中我們沒有看明白,到底是h2調了print,還是print調用了h2。于是引用了Mozilla的例子

復制代碼代碼如下:

function Product(name, price) {
    this.name = name;
    this.price = price;

 

    if (price < 0)
        throw RangeError('Cannot create product "' + name + '" with a negative price');
    return this;
}

function Food(name, price) {
    Product.call(this, name, price);
    this.category = 'food';
}
Food.prototype = new Product();

var cheese = new Food('feta', 5);
console.log(cheese);


在這里我們可以真正地看明白,到底是哪個對象調用了哪個方法。例子中,使用Food構造函數創建的對象實例都會擁有在Product構造函數中添加的 name 屬性和 price 屬性,但 category 屬性是在各自的構造函數中定義的。

 

 

復制代碼代碼如下:

function print(name) {
    console.log( this.p1 + ' ' + this.p2);
}

 

var h2= function(no){
    this.p1 = "hello";
    this.p2 = "world";
    print.call(this, "nothing");
};
h2();

 

這里的h2作為一個接收者來調用函數print。正如在Food例子中,在一個子構造函數中,你可以通過調用父構造函數的 call 方法來實現繼承。

至于Call方法優點,在《Effective JavaScript》中有介紹。

1.使用call方法自定義接收者來調用函數。
2.使用call方法可以調用在給定的對象中不存在的方法。
3.使用call方法可以定義高階函數允許使用者給回調函數指定接收者。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 张家港市| 汕头市| 隆子县| 延边| 庄浪县| 伊宁县| 长武县| 百色市| 柳河县| 邻水| 千阳县| 海晏县| 安达市| 广州市| 霞浦县| 册亨县| 革吉县| 甘洛县| 原平市| 印江| 汤原县| 德昌县| 道真| 桑植县| 炎陵县| 包头市| 崇州市| 肃北| 花莲县| 滕州市| 光泽县| 惠东县| 古丈县| 桐梓县| 寿光市| 乐亭县| 大竹县| 彩票| 太仓市| 北碚区| 乌鲁木齐县|