他可能的意思是在这样做之后,addMethod 对所有基本对象 对象类型(如 String、Number 等)都可用。这是因为 String 对象是一个函数(但由 String 创建的对象不是)。
例如,给定
var s = '';
你可以做
String.addMethod(...);
但不是
s.addMethod(...);
JavaScript 类型系统的简要说明如下:
JavaScript 没有类的正常概念。相反,您可以通过在调用任何函数时将 new 关键字放在它前面来将其转换为构造函数来实现相同的效果。
例如:给定
function MyFunction(x) { this.myX = x; }
如果你像这样调用它
var myObj = new MyFunction(10);
它将创建一个名为 myObj 的对象。该对象将有一个名为 myX 的成员变量。函数 MyFunction 被认为是对象的构造函数(并存储在“构造函数”属性中。
(额外的问题:如果你在没有 new 关键字的情况下调用上面的函数会发生什么,即var x = MyFunction(10)
。答案可能会让任何明智的人感到惊讶。)
现在您已经了解了如何将任意函数转换为构造函数。内置对象完全相同,字符串对象由函数String创建,数字由函数Number创建,等等。
正如那些内置对象是由函数创建的一样,这些函数中的每一个也是由“函数”函数创建的(哎呀!)。
现在到原型。
在上面的例子中,如果你在某处写
MyFunction.prototype.someNewMethod = function() {}
MyFunction 构造函数/函数创建的所有对象似乎都有一个名为 someNewMethod 的额外成员函数。你可以用原型做很多其他时髦的事情,比如替换原型,或者替换原型的原型,但我不是这方面的专家。