JavaScript函數(shù)內(nèi)部屬性有哪些-創(chuàng)新互聯(lián)

了解JavaScript函數(shù)內(nèi)部屬性有哪些?這個(gè)問題可能是我們?nèi)粘W(xué)習(xí)或工作經(jīng)常見到的。希望通過這個(gè)問題能讓你收獲頗深。下面是小編給大家?guī)淼膮⒖純?nèi)容,讓我們一起來看看吧!

創(chuàng)新互聯(lián)公司長(zhǎng)期為千余家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為江蘇企業(yè)提供專業(yè)的成都做網(wǎng)站、成都網(wǎng)站制作,江蘇網(wǎng)站改版等技術(shù)服務(wù)。擁有10余年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。

函數(shù)內(nèi)部有兩個(gè)特殊對(duì)象,this、arguments,其中arguments是一個(gè)類數(shù)組對(duì)象,包含著傳入函數(shù)中的所有參數(shù),主要用來保存函數(shù)參數(shù)。arguments對(duì)象還有一個(gè)callee屬性,callee是一個(gè)指針,指向擁有這個(gè)arguments對(duì)象的函數(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ù)對(duì)象的函數(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)境對(duì)象,當(dāng)函數(shù)被當(dāng)做某個(gè)對(duì)象的方法調(diào)用時(shí),此時(shí)的this對(duì)象引用的是當(dāng)前調(diào)用函數(shù)的對(duì)象。

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

方法調(diào)用

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

例如:

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

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

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

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

當(dāng)函數(shù)作為非對(duì)象方法時(shí)候,this綁定到全局對(duì)象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ù),會(huì)先創(chuàng)建一個(gè)連接到構(gòu)造函數(shù)的prototype(原型對(duì)象),再將this綁定到該對(duì)象

function Person(name){
    this.name = name;
}

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

console.log(person1.sayName());

apply\call\bind

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

 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ù)組對(duì)象)。
bind :方法創(chuàng)建一個(gè)新的函數(shù),調(diào)用時(shí)設(shè)置this關(guān)鍵字為提供的“值”。

ES6 箭頭函數(shù)

es6箭頭函數(shù)里的this指向定義時(shí)所在的對(duì)象,不是執(zhí)行的環(huán)境對(duì)象,就說明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)境對(duì)象,es5中實(shí)現(xiàn)箭頭函數(shù)的方法:采用 that = this這種機(jī)制,實(shí)現(xiàn)this的綁定

感謝各位的閱讀!看完上述內(nèi)容,你們對(duì)JavaScript函數(shù)內(nèi)部屬性有哪些大概了解了嗎?希望文章內(nèi)容對(duì)大家有所幫助。如果想了解更多相關(guān)文章內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)網(wǎng)站制作公司行業(yè)資訊頻道。

當(dāng)前題目:JavaScript函數(shù)內(nèi)部屬性有哪些-創(chuàng)新互聯(lián)
轉(zhuǎn)載注明:http://bm7419.com/article20/cesoco.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作、搜索引擎優(yōu)化、網(wǎng)站收錄ChatGPT、外貿(mào)建站微信小程序

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)公司