From the API属性的定义如Function.name
,方法的定义如Function.prototype.call()
。但在代码中我仍然以同样的方式调用它们,例如:
function Foo() {console.log("inside Foo")}
console.log(Foo.name); // Foo
Foo.call(); // inside Foo
即我只需输入一个函数名称(Foo),然后输入我想要使用的方法/属性。那么为什么在 API 中我会看到 Function
上定义的属性和 Function.prototype
上定义的方法?
最佳答案
将方法放在原型(prototype)
中允许您在所有实例之间共享它们,而不是为每个实例重复它们。
例如,Function.prototype.call
的行为不依赖于调用哪个函数。它只需要对该函数的引用(通过 this
参数接收)以便稍后调用它。
但是,诸如name
之类的内在数据必须存储在函数对象本身中。它无法存储在原型(prototype)
中,因为每个函数实例都有自己的名称
。好吧,它可以存储为内部 [[Name]] 属性,并通过原型(prototype)中定义的 getter 和 setter 进行访问,但数据仍然需要存储在函数中。
请注意,原型(prototype)中定义了非方法属性,例如构造函数
。
关于javascript - 为什么 Function 属性定义在对象本身上(例如 Function.name),而方法定义在 Function.prototype 上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32803473/