註意:Function.prototype是函數數據類型的值,但是相關操作和之前的一模一樣->Empty/anonymous 函數本身也會有一些自己的屬性: length :形參的個數 name:"Fn" 函數名 prototype 類的原型,在原型上定義的方法都是當前Fn這個類實例的公有方法 __ ...
註意:Function.prototype是函數數據類型的值,但是相關操作和之前的一模一樣->Empty/anonymous
函數本身也會有一些自己的屬性:
length :形參的個數
name:"Fn" 函數名
prototype 類的原型,在原型上定義的方法都是當前Fn這個類實例的公有方法
__proto__ 把函數當做一個普通的對象,指向Function這個類的原型
函數在整個JS中是最複雜的也是最重要的知識:
1、一個函數存在了多面性:
"普通函數":本身就是一個普通的函數,執行的時候會形成私有的作用域(閉包),形參賦值,預解釋,代碼執行,執行完成後棧記憶體銷毀/不銷毀
"類":它有自己的實例,也有一個叫做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; f.num //undefined f.aaa//undefined var res = Fn(); res//undefined Fn.aaa//1000