JS中函式的三種角色
阿新 • • 發佈:2020-09-10
函式的三種角色
- 普通函式
- 類
- 普通物件
所有函式資料型別都是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(匿名)