美文网首页
原型与原型链

原型与原型链

作者: zhenghongmo | 来源:发表于2020-03-12 14:09 被阅读0次

    全局对象

    • ECMAScript 规定全局对象叫做 global,但是浏览器把 window 作为全局对象(浏览器先存在的)
    • window 就是一个哈希表,有很多属性。
    • window 的属性就是全局变量。这些全局变量分为两种:
    1. ECMAScript 规定的

      • global.parseInt()
      • global.parseFloat()
      • global.Number()
      • global.String()
      • global.Boolean()
      • global.Object()
    2. 是浏览器自己加的属性

      • window.alert()弹框提示
      • window.prompt()用户填写
      • window.comfirm()确认
      • window.console.log()开发者而工具打印
      • window.console.dir
      • window.document
      • window.document.createElement
      • window.document.getElementById

    全局函数

    1. Number
    var n = new Number(1) 创建一个 Number 对象
    1 与 new Number(1) 的区别是什么?
    
    image
    1. String
    var str = new String('hello') 创建一个 String 对象
    'hello' 与 new String('hello') 的区别是什么?
    
    1. Boolean
    var b = new Boolean(false) 创建一个 Boolean 对象
    false 与 new Boolean(false) 的区别是什么?
    
    image
     if(b){
         console.log(xxx)
    }
    会打印出xxx,因为b为一个对象,并不是是falsy值了
    
    1. Object
    var o1 = {}
    var o2 = new Object()
    o1 和 o2 没区别,但是 o1 === o2 是 false ,因为存储在 Stack(栈内存) 中的地址不同
    

    公用的属性(原型)

    • 把 toString 和 valueOf 放在一个对象里(公用属性组成的对象),
      然后让每一个对象的 __proto__存储这个「公用属性组成的对象」的地址。

    公式

    • var 对象=new 函数()

      <font color="blue">对象.__proto__===函数.prototype</font>
    // 推论
    var number = new Number()
    number.__proto__ = Number.prototype
    Number.__proto__ = Function.prototype // 因为 Number 是 Function 的实例
    
    var object = new Object()
    object.__proto__ = Object.prototype
    Object.__proto__ = Function.prototype // 因为 Object 是 Function 的实例
    
    var function = new Function()
    function.__proto__ = Function.prototype
    Function.__proto__ == Function.prototye // 因为 Function 是 Function 的实例!
    
    

    相关文章

      网友评论

          本文标题:原型与原型链

          本文链接:https://www.haomeiwen.com/subject/smmujhtx.html