zoukankan      html  css  js  c++  java
  • 基础知识点 关于 prototype __proto__

    基础知识点 关于 prototype  __proto__

    供js新手参考

     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 成员。

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

  • 相关阅读:
    linux 批量替换内容
    在Linux下如何查CC攻击?
    mysql init_connect
    利用javascript对字符串加密
    js学习笔记10----字符串的基本操作
    js学习笔记9----时间操作
    3种方法实现列表自动滚动
    如何解决wow.js与fullpage的兼容性
    js兼容获取元素的样式
    用php去除bom头
  • 原文地址:https://www.cnblogs.com/litao229/p/3233327.html
Copyright © 2011-2022 走看看