JavaScript对象的特征
JavaScript的基本数据类型,一种复合值,可看做是属性的无序集合。
每个属性都是一个名/值对。
属性名是字符串,因此可以把对象看成是从字符串到值得映射。
对象除了可以保持自有的属性,还可以从一个称为原型的对象继承属性。
原型式继承(prototypal inheritance)是JavaScript的核心特征。
对象是动态的,可以增加或删除属性。
除了字符串、数值、true、false、null和undefined,其他值都是对象。
对象最常见的用法是对其属性进行创建、设置、查找、删除、检测和枚举等操作。
属性值是任意JavaScript值,或者是一个getter或setter函数。
每个属性还有一些与之相关的值,称为“属性特征(property abttribute)”。
可写(writable attribute),表明是否可以设置属性的值。
可枚举(enumerable attribute),表明是否可以通过for/in结构返回该属性。
可配置(configurable attribute),表明是否可以删除或修改该属性。
每个对象还拥有三个相关的对象特性。
对象的原型(prototype),指向另一个对象,该对象的属性会被当前对象继承。
对象的类(class),一个标识对象类型的字符串。
对象的扩展标记(extensible flag),指明了是否可以向该对象添加新属性。
对象字面量
let empty = {}; //没有任何属性的对象
let point = { x: 0, y: 0 }; //具有属性的对象
let book = {
//属性名中有空格,必须用字符串表示。
"main title": "JavaScript",
//属性名中有特殊字符,必须用字符串表示
"sub-title": "The Definitive Gruide",
//属性名可以是保留字,但尽量避免。
for: "all audiences",
//属性值可以是一个对象。
author: {
firstname: "David",
lastname: "Flanagan",
},
};
对象字面量是一个表达式,每次运算都会创建一个新的对象,其中的属性值也会重新计算。
原型
每一个JavaScript对象(null除外)都和另一个对象相关联,另一个对象”就是原型对象。
每一个对象都从原型继承属性。
所有通过对象字面量创建的对象都具有同一个原型对象。
通过new和构造函数创建的对象的原型就是构造函数的prototype属性引用的对象,如:new Array()对象的原型就是Array.prototype。
极少对象没有原型,如:Object.prototype,它不继承任何属性。
所有内置构造函数都具有一个继承自Object.prototype的原型
举例:
let obj = { value: 100 };
Object.prototype.flag = "head";
console.log(obj.flag);
let arr = [1, 2, 3, 4];
console.log(arr.flag);
创建对象
Object.create( )
// obj1继承了属性x和y。
let obj1 = Object.create({ x: 1, y: 2 });
//obj2不继承任何属性和方法。
let obj2 = Object.create(null);
//obj3是一个普通的空对象。
let obj3 = Object.create(Object.prototype);