基础知识点 关于 prototype __proto__

基础知识点 关于 prototype  __proto__

供js新手参考app

 JavaScript 的一些基础知识点:函数

  1. 在 JavaScript 中,全部对象 o 都拥有一个隐藏的原型对象(在 Firefox 中是 o.__proto__)。该隐藏原型对象拥有一个 constructor 成员,指向该对象的构造函数。当读取对象成员 o.member 时,会顺着原型链往上回溯。所以咱们能够获得o.constructor === o.__proto__.constructor. 这是最基本的知识点,很少说。
  2. 在 JavaScript 中,全部函数声明在解析后,都自动拥有一个 prototype 成员。该 prototype 成员拥有一个自动添加的 constructor 成员,指向函数自己。也就是Fn === Fn.prototype.constructor.
  3. 函数 Fn 自己也是对象,所以Fn.constructor === Fn.__proto__.constructor, 注意Fn.__proto__ !== Fn.prototype, 千万不要混淆了。
  4. var fn = new Fn(),在 Firefox 下,不考虑参数传递,能够用下面的代码来表示 new 的过程:
    var o = {__proto__: Fn.prototype};
    Fn.apply(o);
    fn = o;
    
  5. 上面第 4 点是第 1 点的缘由,由于任何一个对象都源自函数构造器,好比 var a = {} 能够等价为:
    var o = {__proto__: Object.prototype};
    Object.apply(o);
    a = o;
    

    所以全部对象都具备 constructor 成员。prototype

上面 5 点能够归结为 2 点:构造函数的实例化过程和对象成员的原型链回溯机制。理解了这两点,市面上 JavaScript 的各类各样 OOP 机制,好比 Dean Edwards 的 Base.extend,MooTools 里的 new Class, 以及《悟透 JavaScript》里的甘露模型等等,就都能轻松轻松理解了。code

相关文章
相关标签/搜索