创建新对象

1、字面量

var obj = {}

2、构造函数

· 函数名建议首字母大写
· 使用 this 将传入函数的值赋给对象的属性

function Car(make, model, year) {
  this.make = make;
  this.model = model;
  this.year = year;
}
var kenscar = new Car("Nissan", "300ZX", 1992);//实例化对象

实例对象添加属性不会影响到构造函数。因此构造函数中可以设置公用的属性,特有属性在各自的实例化对象中添加

kenscar.color = "black";
console.log(kenscar); // {make: "Nissan", model: "300ZX", year: 1992, color: "black"}
console.log(Car) 
/* Car(make, model, year) {
  this.make = make;
  this.model = model;
  this.year = year;
}*/

在不修改构造函数的前提下,使用prototype添加新的公用属性。

Car.prototype.color = null;
var newCar = new Car();
var newCar2 = new Car();
console.log(newCar);
console.log(newCar2);
image.png

image.png

因为js的继承和原型链原理,默认浏览器会层层向上查询。所以通过prototype添加的属性,可以在实例化对象中使用newCar.color直接访问到,而不需要通过newCar._proto_.color来访问。

3、Object.create(指定原型对象[,属性及描述])

允许为创建的对象指定原型对象

let a = {
    name: 'hello'
}

let o = Object.create(a)
let b = {}

console.log(o.__proto__); // {name: "hello"}
console.log(b.__proto__); // {constructor: ƒ, __defineGetter__: ƒ, …}

第二个参数可选

var o;

// 创建一个原型为null的空对象
o = Object.create(null, {
  // foo会成为所创建对象的数据属性
  foo: { 
    writable:true,
    configurable:true,
    value: "hello" 
  },
  // bar会成为所创建对象的访问器属性
  bar: {
    configurable: false,
    get: function() { return 10 },
    set: function(value) {
      console.log("Setting `o.bar` to", value);
    }
  }
});

console.log(o); // {foo: "hello"}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容