关于Function.prototype 在 Nodejs 中的使用

关于Function.prototype 在 Nodejs 中的使用

    console.log(Array instanceof Function);
console.log([] instanceof Function);
console.log([] instanceof Object);
console.log(Array instanceof Object); // true console.log(Function instanceof Object); // true
console.log(Object instanceof Function); //true console.log(Object instanceof Object); //true console.log(Function instanceof Function); //true

从Array instanceof Object就有点费解了,一般构造函数都是Function 就是一段代码,最后怎么都找到{}上去了? 通常的 Xx.prototype是一个 {}之类的东西,但 Function.prototype是一个function ,但是 Function.prototype的这个function是通过什么跟{}有关系了?


8 回复

关于 Function.prototype 在 Node.js 中的使用

在 JavaScript 中,每个函数(包括那些用户自定义的函数)都继承自 Function.prototype。了解 Function.prototype 的工作原理可以帮助我们更好地理解对象和函数的关系。

示例代码

首先,让我们来看一段代码,以更好地理解这些概念:

console.log(Array instanceof Function);     // false
console.log([] instanceof Function);        // false   
console.log([] instanceof Object);          // true     
console.log(Array instanceof Object);       // true
console.log(Function instanceof Object);    // true    
console.log(Object instanceof Function);    // true
console.log(Object instanceof Object);      // true
console.log(Function instanceof Function);  // true

解释

  1. Array instanceof Function[] instanceof Function:

    • Array 是一个构造函数,它本身并不是一个函数实例,因此 Array instanceof Function 返回 false
    • [] 是数组的一个实例,它也不是一个函数实例,所以 [] instanceof Function 也返回 false
  2. [] instanceof ObjectArray instanceof Object:

    • 数组实例 ([]) 继承自 Object.prototype,因此 [] instanceof Object 返回 true
    • Array 构造函数也是基于 Function.prototype 的,但它同时也是一个对象,因此 Array instanceof Object 也返回 true
  3. Function instanceof Object:

    • Function 本身是一个构造函数,但它也是一个对象,因此 Function instanceof Object 返回 true
  4. Object instanceof Function:

    • Object 是一个构造函数,它本身也是一个函数,因此 Object instanceof Function 返回 true
  5. Function instanceof Function:

    • Function 是所有函数的基类,因此 Function instanceof Function 返回 true

关键点

  • Function.prototype 是所有函数的原型对象。即使你没有显式地定义 prototype 属性,JavaScript 内置的构造函数(如 Array, Object, Function 等)都有默认的 prototype 对象。
  • Function.prototype 本身是一个函数,但它是用来定义所有函数的行为的。例如,你可以向 Function.prototype 添加方法,这些方法将对所有函数可用。

示例:添加全局方法

Function.prototype.log = function() {
    console.log(this.toString());
};

// 使用新添加的方法
function add(a, b) {
    return a + b;
}

add.log();  // 输出: function add(a, b) { return a + b; }

在这个例子中,我们向 Function.prototype 添加了一个 log 方法,这样所有函数都可以调用这个方法来输出它们自身的字符串表示。

希望这些解释和示例能够帮助你更好地理解 Function.prototype 在 Node.js 中的使用。


function 也是一个对象

对象不是 {k:v} 这种的吗?   console.log(typeof Function.prototype); 这个显示的不是object

JS 里对象的意思, 我理解简单点就是 x, 可以设置 x.y 来设置属性 比如 "string" 类型是字符串, 可同时 "string".llength 这样也可以 还有就是函数 f, 也有 f.toString, 你设置一个 f.xy= 1 那也可以 {k, v} 这种形式成为 Map 结构更合适, 也许说 JS 里目前根本没有 Map 这种数据类型…

至于构造器和原型的问题, 表示也理不清楚, 大概 JS 是有缺陷的

  console.log(Function === Function.constructor );  
  console.log(Object === Object.constructor ); 

这个Function 竞然自己构造自己

根据原型链 好象是这么个关系

null -> {} --> [Function: Empty] --> [Function: Function] --> [Function: XXX]

一般的构造器只能在  [Function: Function] --> [Function: XXX]  这个阶段 [Function: Function]  构造了各种轮子[Function: XXX]  也构造了  [Function: Function] 自己, 听起来好象有点乱

《编写高质量代码的XXX个建议》这个系列的丛书不错 其中的JavaScript那本就对这个有详细的讲解 当然还有其他的建议你买本瞅瞅

Function.prototype 是 JavaScript 中所有函数对象的原型对象。理解这一点需要明白 JavaScript 中函数的本质。每个函数在 JavaScript 中不仅是一个可以执行的代码块,它同时也是一个对象。因此,函数具有属性和方法,这些属性和方法可以从 Function.prototype 继承。

以下是一些关于 Function.prototype 的基本概念和示例:

1. 函数作为对象

在 JavaScript 中,函数是一种特殊的对象。因此,函数对象可以拥有属性和方法。Function.prototype 是所有函数的原型对象,这意味着所有的函数都可以访问 Function.prototype 上定义的方法。

2. 示例代码

// 定义一个简单的函数
function greet(name) {
    return "Hello, " + name;
}

// 检查greet函数是否继承自Function.prototype
console.log(greet.hasOwnProperty('toString')); // false,因为greet直接没有这个属性,但是它继承自Function.prototype
console.log(greet.toString()); // 输出函数的字符串表示形式

3. 关于 instanceof 的疑惑

在你的例子中,Array instanceof Object 返回 true 是因为 Array 是基于 Object 构造函数创建的。在 JavaScript 中,几乎所有的内置构造函数(如 Array, Date, RegExp 等)都是基于 Object 构造函数创建的,因此它们实例化的对象会继承 Object.prototype 上的方法。同样地,Function 构造函数也是基于 Object 创建的,所以 Function 实例(如自定义函数)会继承 Object.prototypeFunction.prototype 上的方法。

4. Function.prototype 的作用

Function.prototype 主要提供了函数的一些通用方法,比如 call, apply, bind 等。这些方法可以让函数以不同的上下文调用,或者将函数的部分行为绑定到特定的参数。

总结

Function.prototype 是所有函数的默认原型对象,包含了函数可以使用的许多有用方法。函数本身是基于 Object 构造函数创建的,因此函数对象也可以继承 Object.prototype 上的方法。

回到顶部