1. 程式人生 > 實用技巧 >JS中函式的三種角色

JS中函式的三種角色

函式的三種角色

  • 普通函式
  • 普通物件

所有函式資料型別都是Function類的一個例項
所有函式本身也是一個物件, _ protp _ 指向Function的原型

函式本身也會有一些自己的屬性
length: 形參的個數
name: 函式名
prototype: 類的原型, 在原型上定義的方法都死當前這個類例項的公有方法
_ proto _: 把函式當作一個普通的物件, 指向Function這個類的原型

函式在整個JS種是最複雜也是最重要的知識:

  • 一個函式存在了多面性
    • 普通函式: 執行的時候形成私有的作用域(閉包), 形參賦值, 預解釋, 程式碼執行, 執行完成後棧記憶體銷燬/不銷燬
    • 類: 它有自己的例項, 也有一個叫做prototype屬性是自己的原型, 他的例項都可以指向自己的原型
    • 普通物件: 和 var obj={}種的obj一樣, 就是一個普通的物件, 他作為物件可以有一些自己的私有的屬性, 也可以通過_ proto _找到Function.prototype

這三者之間沒有必然的關係

function Fn(){
    var num = 500;
    this.x = 100;
}
Fn.prototype.getx = function(){
    console.log(this.x)
}
Fn.aaa = 1000;

var f = new Fn; // Fn中的this是f例項
console.log(f.num);  // undefined
console.log(f.aaa); // undefined

var res = Fn(); // Fn中的this是window
console.log(res); // undefined
console.log(x); // 100

console.log(Fn.aaa); // 1000

Function.prototype是函式資料型別的值, 但是相關操作和之前的一模一樣 -> Empty/ anonymous(匿名)