JavaScript 知识量:26 - 101 - 483
工厂模式是一种在JavaScript中创建对象的设计模式,它提供了一种方法来创建对象,而不必显式地指定它们的类。工厂模式可以用来创建具有相同接口但具有不同实现的对象。
以下是一个简单的工厂模式示例:
function createObject(type) { switch(type) { case 'person': return { type: 'person', name: 'John', age: 30 }; case 'car': return { type: 'car', brand: 'Toyota', color: 'red' }; default: throw new Error('Invalid object type'); } } let obj = createObject('person'); console.log(obj); // 输出:{ type: 'person', name: 'John', age: 30 } obj = createObject('car'); console.log(obj); // 输出:{ type: 'car', brand: 'Toyota', color: 'red' }
在上面的示例中,createObject函数是一个工厂函数,它根据传入的类型参数创建并返回一个对象。在这种情况下,可以创建不同类型的对象,例如人或汽车,每个对象都有自己的属性和类型。
可以使用构造函数模式来创建对象。构造函数是一个特殊的函数,用于初始化一个新创建的对象。在JavaScript中,所有的函数都有一个prototype属性,这个属性是一个指向该函数创建的所有实例的链。当一个对象被创建时,它的__proto__属性会指向构造函数的prototype对象。
以下是一个基本的构造函数模式示例:
function Person(name, age) { this.name = name; this.age = age; } let john = new Person('John', 30); console.log(john); // 输出:{ name: 'John', age: 30 }
在这个示例中,Person是一个构造函数,它有两个参数:name和age。当创建一个新的Person对象时,this关键字用来指向新创建的对象,然后将name和age属性添加到这个新对象上。
注意:在JavaScript中,使用new关键字和构造函数来创建对象是很常见的,但这并不是必须的。如果只是调用函数,而没有使用new关键字,JavaScript会自动创建一个新的空对象作为this,并把这个新对象的__proto__链接到构造函数的prototype上。
function Person(name, age) { this.name = name; this.age = age; } let john = Person('John', 30); // 同样可以创建一个Person对象
然而,使用new关键字可以让代码更加清晰,明确地表示正在创建一个新的对象实例。
原型模式也是一种创建对象的方式。通过将一个对象的原型设置为另一个对象,可以使新创建的对象从另一个对象继承属性和方法。
以下是一个基本的原型模式示例:
// 定义一个原型对象 let Person = { name: "Unknown", age: 0, hello: function() { console.log(`Hello, my name is ${this.name}`); } }; // 创建一个新对象 let john = Object.create(Person); john.name = "John"; john.age = 30; // 调用继承的方法 john.hello(); // 输出:Hello, my name is John
在这个示例中,定义了一个Person原型对象,它具有name、age和hello方法。然后使用Object.create()方法创建了一个新的对象john,并将Person作为它的原型。这样,john就可以从Person原型对象继承属性和方法。为john设置了name和age属性,并调用了hello方法。
在 JavaScript 中,所有的对象都有一个指向其原型的内部链接。当创建一个新对象时,这个新对象的原型(也就是它的__proto__属性)就会被设置为构造函数的prototype对象。通过这种方式,所有的对象都可以从其构造函数的原型继承属性和方法。
迭代对象属性可以使用Object.values()和Object.entries()。Object.values()和Object.entries()是JavaScript中Object对象的两个方法,它们用于从对象中提取数据。
1. Object.values():用于返回一个由对象的所有值组成的数组,其排列与用枚举器(如for...in循环)按属性序数索引的顺序相对应。例如:
let obj = { "name": "John", "age": 30, "city": "New York" }; console.log(Object.values(obj)); // 输出:[ 'John', 30, 'New York' ]
2. Object.entries():用于返回一个由对象的键值对数组组成的结果,其中每个数组的两个元素分别对应于对象的键和值。例如:
let obj = { "name": "John", "age": 30, "city": "New York" }; console.log(Object.entries(obj)); // 输出:[ [ 'name', 'John' ], [ 'age', 30 ], [ 'city', 'New York' ] ]
每个键值对数组的两个元素分别是对象的键和值。因此,如果希望在迭代过程中同时获取键和值,那么Object.entries()就很有用。如果只需要对象的值,那么使用Object.values()会更方便。
Copyright © 2017-Now pnotes.cn. All Rights Reserved.
编程学习笔记 保留所有权利
MARK:3.0.0.20240214.P35
From 2017.2.6