面向对象编程 -- 创建对象3

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

面向对象编程 -- 创建对象3

一、对象迭代

// ECMAScript 2017 新增了两个静态方法,用于将对象内容转换为序列化的 -- 更重要的是可迭代 -- 格式

// 这两个静态方法 Object.values() 和 Object.entries() 接收一个对象,返回它们内容的数组。

const o = {
	foo: 'bar',
	baz: 1,
	qux: {}
};

console.log(Object.values(o));

console.log(Object.entries(o));

对象迭代 01.png

// 注意,非字符串属性会被转换为字符串输出。

// 另外,这两个方法执行对象的浅复制:

const o ={
	qux: {}
};

console.log(Object.values(o)[0] === o.qux);

console.log(Object.entries(o)[0][1] === o.qux);

对象迭代2 02.png

// 符合属性会被忽略


const sym = Symbol();
const o ={
	[sym]: 'foo'
};

console.log(Object.values(o));

console.log(Object.entries(o));

对象迭代3 03.png

1.其他原型语法

// 为了减少代码冗余,也为了从视觉上更好地封装原型功能,直接通过一个包含所有属性和方法的对象字面量来重写原型成为了一种常见的做法。

function Person() {}

Person.prototype = {
	name: "Nicholas",
	age: 29,
	job: "Software Engineer",
	sayName() {
		console.log(this.name);
	}
};

其他原型语法 04.png

// 虽然 instanceof 操作符还能可靠地返回值,但我们不能再依靠 constructor 属性来识别类型了

console.log(friend instanceof Object);
console.log(friend instanceof Person);

console.log(friend.constructor == Person);
console.log(friend.constructor == Object);

其他原型语法2 05.png

2.原型的动态性

// 因为从原型上搜索值的过程是动态的,所以即使实例在修改原型之前已经存在,任何时候对原型对象所做的修改也会在实例上反映出来。

let friend = new Person();

Person.prototype.sayHi = function() {
	console.log("hi");
};
friend.sayHi();

原型的动态性 06.png

3.原生对象原型

// 原型模式之所以重要,不仅体现在自定义类型上,而且还因为它也是实现所有原生引用类型的模式。

	console.log(typeof Array.prototype.sort);
	console.log(typeof String.prototype.substring);

原生对象原型 07.png

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6