国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

JavaScript函數(shù)內(nèi)部屬性

zhunjiee / 2751人閱讀

摘要:函數(shù)內(nèi)部屬性函數(shù)內(nèi)部有兩個(gè)特殊對象,其中是一個(gè)類數(shù)組對象,包含著傳入函數(shù)中的所有參數(shù),主要用來保存函數(shù)參數(shù)。方法創(chuàng)建一個(gè)新的函數(shù),調(diào)用時(shí)設(shè)置關(guān)鍵字為提供的值。

JavaScript函數(shù)內(nèi)部屬性

函數(shù)內(nèi)部有兩個(gè)特殊對象,this、arguments,其中arguments是一個(gè)類數(shù)組對象,包含著傳入函數(shù)中的所有參數(shù),主要用來保存函數(shù)參數(shù)。arguments對象還有一個(gè)callee屬性,callee是一個(gè)指針,指向擁有這個(gè)arguments對象的函數(shù)。

callee
function fact(num){
        if(num<=1){
        return 1;
        }else{
        return num*fact(num-1);
        }
    }

這是一個(gè)實(shí)現(xiàn)階乘的函數(shù),采用遞歸的方式,這種方式存在一個(gè)問題就是,當(dāng)fact的名稱更改以后,如果不及時(shí)更改函數(shù)內(nèi)部的函數(shù)名稱,該函數(shù)則無效。此時(shí)采用callee屬性替代當(dāng)前擁有num參數(shù)對象的函數(shù)也就是fact.

采用callee實(shí)現(xiàn)如下

function fact(num){
            if(num<=1){
            return 1;
            }else{
            return num*arguments.callee(num-1);
            }
        }
this
this引用的是函數(shù)執(zhí)行的環(huán)境對象,當(dāng)函數(shù)被當(dāng)做某個(gè)對象的方法調(diào)用時(shí),此時(shí)的this對象引用的是當(dāng)前調(diào)用函數(shù)的對象。

不同的環(huán)境this指向的值不同,下面是幾種this在不同執(zhí)行環(huán)境下所指向的值

方法調(diào)用

當(dāng)函數(shù)作為對象方法的時(shí)候,函數(shù)里的this被綁定到當(dāng)前對象上(也可以稱之為方法調(diào)用)

例如:

var myNum = {
      value:1,
      increment:function(arg){
          this.value +=arg;

      }
  };
   myNum.increment(3);
  console.log("example1:"+myNum.value);//example1:4

上述的increment是一個(gè)對象方法,該對象方法內(nèi)部的this指向的就是當(dāng)前對象

函數(shù)調(diào)用

當(dāng)函數(shù)作為非對象方法時(shí)候,this綁定到全局對象window,如果此時(shí)要調(diào)用內(nèi)部函數(shù)可以采用that = this。

// 一般的函數(shù)
function add(a){
    return a+2 ;
}

var value = 2;
myNum.count = function (){
    let value = 1;
    let help = function(){
        this.value = add(this.value);
    }
    help();
    console.log(this.value);//4
}
myNum.count();


that = this方式

var value = 2;
myNum.count = function (){
    let value = 1;
    let that = this;
    let help = function(){
        that.value = add(that.value);
    }
    help();
    console.log(that.value);//3
}
myNum.count();


構(gòu)造函數(shù)

用new運(yùn)算符調(diào)用構(gòu)造函數(shù),會先創(chuàng)建一個(gè)連接到構(gòu)造函數(shù)的prototype(原型對象),再將this綁定到該對象

function Person(name){

    this.name = name;
}

Person.prototype.sayName = function(){
    return this.name;
}
var person1 = new Person("TOM");

console.log(person1.sayName());

applycallind

綁定this到指定的環(huán)境對象

 
 var people = {
    name:"LILY"
}
console.log(Person.prototype.sayName.apply(people));
console.log(Person.prototype.sayName.bind(people)());
console.log(Person.prototype.sayName.call(people));

call :方法調(diào)用一個(gè)具有給定this值的函數(shù),以及提供的參數(shù)列表。
apply: 方法調(diào)用一個(gè)具有給定this值的函數(shù),以及提供的參數(shù)(數(shù)組或類數(shù)組對象)。
bind :方法創(chuàng)建一個(gè)新的函數(shù),調(diào)用時(shí)設(shè)置this關(guān)鍵字為提供的“值”。

ES6 箭頭函數(shù)

es6箭頭函數(shù)里的this指向定義時(shí)所在的對象,不是執(zhí)行的環(huán)境對象,就說明this在箭頭函數(shù)里使用時(shí)是一個(gè)不變的值

function foo(){
    setTimeout(()=>{
        console.log("name:",this.name);
    },1000)
}
var name = "kiki";
foo.call({name:"didi"});//name:didi


箭頭函數(shù)里this的值指向的是定義時(shí)所在的環(huán)境對象,es5中實(shí)現(xiàn)箭頭函數(shù)的方法:采用 that = this這種機(jī)制,實(shí)現(xiàn)this的綁定



以上是對函數(shù)的內(nèi)部屬性的理解。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/102588.html

相關(guān)文章

  • JavaScript難點(diǎn)筆記

    摘要:是班的學(xué)生構(gòu)造函數(shù)的就是由這個(gè)構(gòu)造函數(shù)得到的對象的原型對象父類對象構(gòu)造函數(shù)的對象就是實(shí)例化對象和的原型對象。由于的所有對象都是構(gòu)造函數(shù)只有除外。 前言 由于工作需求重新回顧了一下JavaScript,以下內(nèi)容是我以前的學(xué)習(xí)筆記和其他參考資料整理完善后的內(nèi)容,都是常用到的,使用頻率比較高的,自己必須得精通的知識點(diǎn)的總結(jié),便以后再復(fù)習(xí)參考。 第一章 JavaScript原型對象與原型鏈 1...

    APICloud 評論0 收藏0
  • JavaScript難點(diǎn)筆記

    摘要:是班的學(xué)生構(gòu)造函數(shù)的就是由這個(gè)構(gòu)造函數(shù)得到的對象的原型對象父類對象構(gòu)造函數(shù)的對象就是實(shí)例化對象和的原型對象。由于的所有對象都是構(gòu)造函數(shù)只有除外。 前言 由于工作需求重新回顧了一下JavaScript,以下內(nèi)容是我以前的學(xué)習(xí)筆記和其他參考資料整理完善后的內(nèi)容,都是常用到的,使用頻率比較高的,自己必須得精通的知識點(diǎn)的總結(jié),便以后再復(fù)習(xí)參考。 第一章 JavaScript原型對象與原型鏈 1...

    WrBug 評論0 收藏0
  • JavaScript難點(diǎn)筆記

    摘要:是班的學(xué)生構(gòu)造函數(shù)的就是由這個(gè)構(gòu)造函數(shù)得到的對象的原型對象父類對象構(gòu)造函數(shù)的對象就是實(shí)例化對象和的原型對象。由于的所有對象都是構(gòu)造函數(shù)只有除外。 前言 由于工作需求重新回顧了一下JavaScript,以下內(nèi)容是我以前的學(xué)習(xí)筆記和其他參考資料整理完善后的內(nèi)容,都是常用到的,使用頻率比較高的,自己必須得精通的知識點(diǎn)的總結(jié),便以后再復(fù)習(xí)參考。 第一章 JavaScript原型對象與原型鏈 1...

    Alfred 評論0 收藏0
  • 不為人知的javascript內(nèi)部屬性

    摘要:詞法階段會定義函數(shù)所用到的變量,加入到內(nèi)部屬性當(dāng)中,它是一個(gè)數(shù)組,最后一位永遠(yuǎn)都是全局對象,向前依次是祖先父級。這個(gè)等同于的非標(biāo)準(zhǔn)但許多瀏覽器實(shí)現(xiàn)的屬性。 內(nèi)部屬性在我們了解對象原型及環(huán)境變量時(shí)都有遇到過,可是畢竟看不到摸不著,很難更加深入的了解它的工作流程和作用,最近在chrome當(dāng)中查看對象結(jié)構(gòu)時(shí),看到了釋放出來的一些內(nèi)部屬性,這些以前大概都是概念,那么既然能看到,就讓我們來探索一...

    plokmju88 評論0 收藏0
  • 這一次,我們換種姿勢學(xué)習(xí) javascript

    摘要:操作符或調(diào)用函數(shù)時(shí)傳入?yún)?shù)的操作都會導(dǎo)致關(guān)聯(lián)作用域的賦值操作。此外可以使用和來設(shè)置對象及其屬性的不可變性級別。忽視這一點(diǎn)會導(dǎo)致許多問題。使用調(diào)用函數(shù)時(shí)會把新對象的屬性關(guān)聯(lián)到其他對象。 前言 《你不知道的 javascript》是一個(gè)前端學(xué)習(xí)必讀的系列,讓不求甚解的JavaScript開發(fā)者迎難而上,深入語言內(nèi)部,弄清楚JavaScript每一個(gè)零部件的用途。本書介紹了該系列的兩個(gè)主題:...

    zone 評論0 收藏0
  • 我所認(rèn)識的JavaScript作用域鏈和原型鏈

    摘要:為了防止之后自己又開始模糊,所以自己來總結(jié)一下中關(guān)于作用域鏈和原型鏈的知識,并將二者相比較看待進(jìn)一步加深理解。因此我們發(fā)現(xiàn)當(dāng)多個(gè)作用域相互嵌套的時(shí)候,就形成了作用域鏈。原型鏈原型說完了作用域鏈,我們來講講原型鏈。   畢業(yè)也整整一年了,看著很多學(xué)弟都畢業(yè)了,忽然心中頗有感慨,時(shí)間一去不復(fù)還呀。記得從去年這個(gè)時(shí)候接觸到JavaScript,從一開始就很喜歡這門語言,當(dāng)時(shí)迷迷糊糊看完了《J...

    Bmob 評論0 收藏0

發(fā)表評論

0條評論

zhunjiee

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<