关于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是通过什么跟{}有关系了?
关于 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
解释
-
Array instanceof Function
和[] instanceof Function
:Array
是一个构造函数,它本身并不是一个函数实例,因此Array instanceof Function
返回false
。[]
是数组的一个实例,它也不是一个函数实例,所以[] instanceof Function
也返回false
。
-
[] instanceof Object
和Array instanceof Object
:- 数组实例 (
[]
) 继承自Object.prototype
,因此[] instanceof Object
返回true
。 Array
构造函数也是基于Function.prototype
的,但它同时也是一个对象,因此Array instanceof Object
也返回true
。
- 数组实例 (
-
Function instanceof Object
:Function
本身是一个构造函数,但它也是一个对象,因此Function instanceof Object
返回true
。
-
Object instanceof Function
:Object
是一个构造函数,它本身也是一个函数,因此Object instanceof Function
返回true
。
-
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那本就对这个有详细的讲解 当然还有其他的建议你买本瞅瞅