函数本身有自己的属性:
1、length:0 形参的个数
2、name:Fn 函数名
3、prototype:类的原型,在原型上定义的方法是当前 Fn 这个类实例的公有方法
4、__proto__
:把函数当作一个普通对象,指向 Function 这个类的原型
一个函数存在多面性:
1、“普通函数”:它本身就是一个普通函数,执行的时候会形成私有作用域(闭包),形参赋值,预解释,代码执行,执行完成后栈内存销毁 / 不销毁
2、“类”:它有自己的实例,也有一个 prototype 属性是自己的原型,它的实例都可以指向自己的原型
3、“普通对象”:和 var obj = {} 中的 obj 一样,就是一个普通对象,它作为对象可以有一些自己的私有属性,也可以通过__proto__
找到 Function.prototype
但这三者没有必然关系,如下案例:
function Fn(){
var num = 10;
this.x = 100;
}
Fn.prototype.getX = function(){
console.log(this.x)
}
Fn.aaa = 1000
var f = new Fn // Fn中的this是f
f.num = undefined
f.aaa = undefined
var resulet = Fn() // Fn中的this值window
resulet = undefined
Fn.aaa = 1000
内存图:
function Fn(){
this.n = 100;
}
Fn.prototype.getN = function(){
console.log(this.n);
}
Fn.AA = 200;
var f = new Fn
原型图
Function.prototype是函数数据类型的值,但是相关操作和之前的一摸一样。
网友评论