1、函數(shù)本身也有一些自己的屬性
// length: 行參的個(gè)數(shù)
// name: 函數(shù)名
// prototype: 類的原型,在原型上定義的方法,都是當(dāng)前Fn這個(gè)實(shí)例的公有的方法。
// _ proto _ 把函數(shù)當(dāng)做一個(gè)普通的對象,指向Function這個(gè)類的原型
2.一個(gè)函數(shù)存在多面性
(1)、"普通函數(shù)":本身就是一個(gè)普通的函數(shù),執(zhí)行的時(shí)候行成私有的作用域(閉包),進(jìn)行形參賦值、預(yù)解釋、代碼執(zhí)行,執(zhí)行完成后棧內(nèi)存銷毀或者不銷毀;
(2)、"類": 它有自己的實(shí)例,也有一個(gè)叫做prototype的屬性是自己的原型,它的實(shí)例都可以指向自己的原型;
(3)、"普通對象": 和let obj = {}一樣,作為一個(gè)普通的對象,作為普通的對象,有一些自己私有的屬性,也可以通過 _ proto _找到Function.prototype
// 上面三者之間沒有必然的聯(lián)系
Function.prototype是函數(shù)數(shù)據(jù)類型的值,操作和之前的一模一樣
function Fn () {
var num = 100;
this.x = 200;
}
let f = new Fn; //Fn里面的this是f
Fn.aaa = 300;
f.num // undefined
f.aaa // undefined
let res = Fn(); // Fn里面的this是window
res // undefined
Fn.aaa // 300