美文网首页
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