美文网首页
Javascript学习笔记——6.1 创建对象

Javascript学习笔记——6.1 创建对象

作者: IFELSE | 来源:发表于2018-04-18 09:21 被阅读0次

    创建对象三种方式:

    • 对象直接量
    • 使用new关键字
    • Object.create()

    对象直接量

    对象直接量是由若干名/值对组成的映射表,名和值用分号隔开,对之间用逗号隔开,整个映射表用花括号括起来,名值对称为属性

    var empty = {} //没有任何属性的对象
    var point = {x:12,y:21}
    var person = {
      name:'Mike',
      age:31
    }
    

    对象直接量是一个表达式,表达式的运算会创建并初始化一个对象。

    使用new

    new运算符创建并初始化一个新对象。关键字new后跟随一个函数调用,称为构造函数(constructor)。

    var o = new Object()//创建一个空对象{}
    var a = new Array() //创建一个空数组 []
    var d = new Date() //创建一个表示当前时间的Date对象
    var r = new RegExp('js') //创建一个正则表达式对象
    

    以上是内置的构造函数,用户也可以自定义构造函数。

    原型

    要理解Object.create()方式,先要了解原型链的知识。

    几乎每一个javascript对象都有与之关联的对象,称为原型对象,一个对象从它的原型对象继承属性。注意原型对象不是类,而是一个真实的对象,这和基于类的继承要区分开。

    引用对象原型:

    • 对象直接量和new Object()创建的对象继承自Object.prototype。
    • 通过new+构造函数创建的对象的原型是构造函数的prototype属性,比如new Array()创建的对象原型是Array.prototype。

    只有很少的对象没有原型,Object.prototype是其中之一,它不继承任何属性。

    所有的内置构造函数都有继承自Object.prototype的原型,比如Date.prototype的属性继承自Object.prototye,所以new Date()创建的对象继承了Date.prototype和Object.prototype的属性。这种链型继承关系称为原型链(prototype chain)。

    Object.create()

    Object.create(原型对象)创建一个新的对象,它是一个静态函数,不是某个对象的调用方法。

    var o1 = Object.create({x:1,y:2})
    o1.x //1
    o1.__proto__  //{x:1,y:2}
    o1.x = 5
    o1.__proto__ //{x:1,y:2}
    o1.x //5
    

    可以通过传入null作为参数创建一个没有原型的新对象,这种对象没有继承任何属性和方法。

    var o2 = Object.create(null)
    o2.__proto__ //undefined
    

    使用Object.create()创建一个空对象Object.create(Object.prototype),等同于{}new Object()

    任意对象都可以当做原型对象创建新对象,即所有的对象都可以被继承。

    var o = {x:1,y:2}
    var o1 = Object.create(o)
    var o2 = Object.create(o)
    o2.__proto__.x = 10
    o1.__proto__.x //变成10了
    

    相关文章

      网友评论

          本文标题:Javascript学习笔记——6.1 创建对象

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