首頁 > web前端 > js教程 > 主體

JavaScript函數內部屬性的介紹(附範例)

不言
發布: 2019-03-18 11:38:39
轉載
1988 人瀏覽過

這篇文章帶給大家的內容是關於JavaScript函數內部屬性的介紹(附範例),有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。

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

callee

function fact(num){
        if(num<=1){
        return 1;
        }else{
        return num*fact(num-1);
        }
    }
登入後複製

這是一個實現階乘的函數,採用遞歸的方式,這種方式存在一個問題就是,當fact的名稱更改以後,如果不及時更改函數內部的函數名稱,函數則無效。此時採用callee屬性取代目前擁有num參數物件的函數也就是fact.

採用callee實作如下

function fact(num){
            if(num<=1){
            return 1;
            }else{
            return num*arguments.callee(num-1);
            }
        }
登入後複製

this

##this引用的是函數執行的環境對象,當函數被當做某個物件的方法呼叫時,此時的this物件引用的是當前呼叫函數的物件。

不同的環境this指向的值不同,下面是幾種this在不同執行環境下所指向的值

方法呼叫

當函數作為物件方法的時候,函數裡的this被綁定到當前物件上(也可以稱之為方法呼叫)

例如:

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

      }
  };
   myNum.increment(3);
  console.log(&#39;example1:&#39;+myNum.value);//example1:4
登入後複製

上述的increment是一個物件方法,該物件方法內部的this指向的就是當前物件

函數呼叫

當函數作為非物件方法時候,this綁定到全域物件window,如果此時要呼叫內部函數可以採用that = this。

// 一般的函数
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();
登入後複製

建構子

用new運算子呼叫建構函數,會先建立一個連接到建構函數的prototype(原型物件),再將this綁定到該物件

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

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

console.log(person1.sayName());
登入後複製

apply\call\bind

綁定this到指定的環境物件

 
 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 :方法呼叫一個具有給定this值的函數,以及提供的參數清單。

apply: 方法呼叫一個具有給定this值的函數,以及提供的參數(陣列或類別陣列物件)。
bind :方法建立一個新的函數,呼叫時設定this關鍵字為提供的「值」。

ES6 箭頭函數

es6箭頭函數裡的this指向定義時所在的對象,不是執行的環境對象,就說明this在箭頭函數裡使用時是一個不變的值

function foo(){
    setTimeout(()=>{
        console.log('name:',this.name);
    },1000)
}
var name = "kiki";
foo.call({name:"didi"});//name:didi
登入後複製
箭頭函數裡this的值指向的是定義時所在的環境對象,es5中實現箭頭函數的方法:採用that = this這種機制,實現this的綁定

以上是對函數的內部屬性的理解。

#

以上是JavaScript函數內部屬性的介紹(附範例)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:segmentfault.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板