JS中函数的三种角色

函数的三种角色

  • 普通函数
  • 普通对象

所有函数数据类型都是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(匿名)

原文地址:https://www.cnblogs.com/xiaoxu-xmy/p/13645082.html