js的原型和原型链
学习过ruby,一开始看到原型链的时候想着,哎,这不是ruby的对象模型么。后来发现,虽然功能是类似的,但js和ruby在细节上差别还是很大的。
js里的构造函数在创建对象的时候会将对象的proto属性指向原型对象
当在对象上访问某个方法时也会沿着proto对象访问
一般最后一个有意义的原型对象是Object.prototype
Object.prototype.proto就是null了
可以看出,原型对象里的方法和属性是所有new Constructor出来的对象共有的
原型链的顶端是Object.prototype, 其中有 toString 和 valueOf。因此所有对象都可以使用这两个方法
对js原型链的一些看法,
和ruby相比呢js的原型链是较短的,也没有类类型的概念。js通过原型链实现了方法的共享(通过ConstructorA.prototype.__proto = SomeProtoType可以改变改变原型链)。如果没学过其它语言,js的原型链其实是很直观方便的,学过其它语言反而可能会生搬硬套,这是很有趣的一个地方,哈哈哈。
总之js是很神奇的动态语言,它是随着网页开发发展起来的。它现在一些看起来不合理的地方也是早期设计目标和现代web需求变化造成的。应该客观看待。