美文网首页
原型和原型链

原型和原型链

作者: leiuno | 来源:发表于2018-06-17 00:31 被阅读0次

    JS里的内置对象

    全局对象

    ECMAScript 规定全局对象叫做 global,浏览器默认全局对象是window
    ECMAScript规定的函数,在任何地方可以使用的函数

    global.parseInt
    global.parseFloat
    global.Number
    global.String
    global.Boolean
    global.Object
    

    浏览器私有的函数

    window.alert
    window.prompt
    window.comfirm
    window.console.log
    window.console.dir
    window.document
    window.document.createElement
    window.document.getElementById
    

    简单类型与对象

    var n1 = 1  //n1是简单的数据类型,值是1
    n1.toString()  //'1'
    var n2 = new Number(1)  //n2是对象,valueOf值是1
    

    简单类型是没有属性的,那是如何调用toString()方法的呢?简单的类型是怎么用对象的方法的?以n1.toString为例
    生成一个临时对象,临时对象里再调用toString(),具体步骤如下:
    1、n1.toString(),
    2、生成一个临时对象temp,temp = new Number(n1)
    3、temp对象调用toString(),temp.toString()

    简单类型加上一个属性并赋值,是否可以取到该属性的值?

    var n1 = 1
    n1.*** = 2  //临时对象被回收
    n1.*** = ?  //undefined
    

    所以JS中简单类型也可以看作是一个对象

    当一个变量使用一个属性或方法时,JS会判断此变量是否是对象,若不是对象,则包装成一个对象。

    原型

    object的共有属性 Object.protype,这就是原型,Object的共有属性是所有对象的共有属性
    prototype属性,这个属性包含一个对象__proto__,用来存共有属性

    var o1 = {}
    o1.__proto__ === Object.prototype    //true
    

    原型链

    JS在创建对象(不论是普通对象还是函数对象)的时候,都有一个叫做__proto__的内置属性,用于指向创建它的函数对象的原型对象prototype。

    var 对象 = new 函数()
    对象.__proto__ === 函数.prototype
    
    __proto__  //对象的属性
    prototype  //函数的属性
    
    函数.prototype 也是一个对象
    函数.prototype.__proto__ === Object.prototype
    

    如下例

    var n = new Number(2);
    n.__proto__  //存Number的共有属性
    n.__proto__ === Number.prototype  //true
    n.__proto__.__proto__  //存对象的共有属性
    n.__proto__.__proto__ === Object.prototype  //true
    

    Number.prototype是Number共有属性的引用
    n.__proto__是Number的共有属性的引用

    相关文章

      网友评论

          本文标题:原型和原型链

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