面向对象编程 -- 创建对象3
一、对象迭代
// ECMAScript 2017 新增了两个静态方法,用于将对象内容转换为序列化的 -- 更重要的是可迭代 -- 格式
// 这两个静态方法 Object.values() 和 Object.entries() 接收一个对象,返回它们内容的数组。
const o = {
foo: 'bar',
baz: 1,
qux: {}
};
console.log(Object.values(o));
console.log(Object.entries(o));
// 注意,非字符串属性会被转换为字符串输出。
// 另外,这两个方法执行对象的浅复制:
const o ={
qux: {}
};
console.log(Object.values(o)[0] === o.qux);
console.log(Object.entries(o)[0][1] === o.qux);
// 符合属性会被忽略
const sym = Symbol();
const o ={
[sym]: 'foo'
};
console.log(Object.values(o));
console.log(Object.entries(o));
1.其他原型语法
// 为了减少代码冗余,也为了从视觉上更好地封装原型功能,直接通过一个包含所有属性和方法的对象字面量来重写原型成为了一种常见的做法。
function Person() {}
Person.prototype = {
name: "Nicholas",
age: 29,
job: "Software Engineer",
sayName() {
console.log(this.name);
}
};
// 虽然 instanceof 操作符还能可靠地返回值,但我们不能再依靠 constructor 属性来识别类型了
console.log(friend instanceof Object);
console.log(friend instanceof Person);
console.log(friend.constructor == Person);
console.log(friend.constructor == Object);
2.原型的动态性
// 因为从原型上搜索值的过程是动态的,所以即使实例在修改原型之前已经存在,任何时候对原型对象所做的修改也会在实例上反映出来。
let friend = new Person();
Person.prototype.sayHi = function() {
console.log("hi");
};
friend.sayHi();
3.原生对象原型
// 原型模式之所以重要,不仅体现在自定义类型上,而且还因为它也是实现所有原生引用类型的模式。
console.log(typeof Array.prototype.sort);
console.log(typeof String.prototype.substring);
标签:console,log,--,Object,创建对象,Person,原型,面向对象编程,friend
From: https://blog.51cto.com/u_14483476/6192513