他大概的意思正是这样做之后,addMethod成为可用于所有基本
对象
对象类型像字符串,数字等,这是因为String对象是一个函数(但字符串创建的对象都没有)。
例如,鉴于
var s = '';
你可以做
String.addMethod(...);
但不
s.addMethod(...);
JavaScript的类型系统的简要介绍到这里:
JavaScript并不有正常的课程概念。相反,通过将任何函数转换为构造函数,可以通过在调用时将new关键字放在它前面来达到相同的效果。
E.g:给予
function MyFunction(x) { this.myX = x; }
如果你调用它像
var myObj = new MyFunction(10);
它会创建一个名为MyObj中的对象。这个对象将有一个名为myX的成员变量。该函数myFunction是考虑对象的构造函数(并存储在“构造”特性
(奖金的问题:如果你调用该函数上面没有新的关键字,即var x = MyFunction(10)
会发生什么,答案很可能惊奇任何明智的人)
现在您已经看到了如何将任意函数转换为构造函数。内建对象完全相同,字符串对象由函数String创建,数字由函数创建编号等
就像是由函数创建的那些内置的对象,每个对象的这些功能也是通过“功能”功能创建(亚克西!)。
现在到原型。
在上面的例子中
,如果你的地方写
MyFunction.prototype.someNewMethod = function() {}
由MyFunction的构造函数创建的所有对象/功能会出现有所谓someNewMethod一个额外的成员函数。你可以用原型做很多其他有趣的事情,比如替换原型,或者替换原型的原型,但我不是这方面的专家。
不,这是JavaScript的执行原型继承是愚蠢的。其奇怪的使用函数作为构造函数样式给你没有原型的潜在优势,但仍然与大多数程序员所理解的基于类的继承无异。很高兴能够准确理解JavaScript原型正在做什么,但不要期望突然明白为什么该模型有意义。因为它不。 – bobince 2009-09-03 15:16:44