函数的三种角色

2019-12-10  本文已影响0人  空压机百科

函数本身有自己的属性:
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是函数数据类型的值,但是相关操作和之前的一摸一样。

上一篇下一篇

猜你喜欢

热点阅读