JS面向对象之常见创建对象的几种方式
在JavaScript中,创建对象一共有以下几种常见的方式:
- 工厂模式
- 构造函数模式
- 原型模式
下面我们将详细讲解每种创建对象的方式并且给出相应的示例。
工厂模式
工厂模式是用来创建多个相似对象的一种模式,它是通过一个工厂方法创建对象并返回。下面是一个简单的工厂模式的示例。
// 创建一个工厂对象
var bookFactory = {
createBook: function(title, author, price) {
var book = {};
book.title = title;
book.author = author;
book.price = price;
book.display = function() {
console.log("Title: "+this.title+"\nAuthor: "+this.author+"\nPrice: "+this.price);
};
return book;
}
}
// 创建两个book对象
var book1 = bookFactory.createBook("The Little Prince", "Antoine de Saint-Exupéry", 8.98);
var book2 = bookFactory.createBook("Harry Potter and the Philosopher's Stone", "J.K. Rowling", 14.99);
// 调用display方法展示book信息
book1.display();
book2.display();
在上述代码中,我们通过一个工厂方法createBook
来创建了两个book对象,每个对象都有自己的title、author和price属性,同时还添加了一个display
方法来展示对象的信息。
构造函数模式
构造函数模式是通过一个构造函数来创建一个对象,它的本质就是一个普通函数,只不过调用的方式和一般函数不同。下面是一个简单的构造函数模式的示例。
// 创建一个构造函数对象
function Book(title, author, price) {
this.title = title;
this.author = author;
this.price = price;
this.display = function() {
console.log("Title: "+this.title+"\nAuthor: "+this.author+"\nPrice: "+this.price);
};
}
// 创建两个book对象
var book1 = new Book("The Little Prince", "Antoine de Saint-Exupéry", 8.98);
var book2 = new Book("Harry Potter and the Philosopher's Stone", "J.K. Rowling", 14.99);
// 调用display方法展示book信息
book1.display();
book2.display();
在上述代码中,我们通过一个构造函数Book
来创建了两个book对象,同样有title、author、price和display属性。
对于构造函数模式,我们需要注意的是如果有多个实例对象,那么这些实例对象都是独立的,它们各自保存着自己的属性和方法。
原型模式
原型模式是通过构造函数的原型来创建一个对象。在原型中定义的属性和方法将被所有实例对象所共享。下面是一个简单的原型模式的示例。
// 创建一个构造函数对象
function Book(){};
Book.prototype.title = 'none';
Book.prototype.author = 'none';
Book.prototype.price = 0;
Book.prototype.display = function() {
console.log("Title: "+this.title+"\nAuthor: "+this.author+"\nPrice: "+this.price);
};
// 创建两个book对象
var book1 = new Book();
book1.title = "The Little Prince";
book1.author = "Antoine de Saint-Exupéry";
book1.price = 8.98;
var book2 = new Book();
book2.title = "Harry Potter and the Philosopher's Stone";
book2.author = "J.K. Rowling";
book2.price = 14.99;
// 调用display方法展示book信息
book1.display();
book2.display();
在上述代码中,我们通过构造函数Book
的原型对象来创建了两个book对象。在原型中定义的属性和方法都是共享的,而title、author和price属性则是在实例化对象时被重新赋值的。
总结
既然提到了创建对象,那就不能不提对象池。对象池就是保存一定数量的相同对象供反复使用的一种方法。当需要创建一个新对象时,对象池中有现成的对象可以使用则返回一个现成的对象,如果对象池中没有现成的对象则创建新的对象。这种方式避免了频繁的对象创建和销毁,提高了效率。同时,需要重点注意的是对象复用时可能会存在对象的污染问题。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:js面向对象之常见创建对象的几种方式(工厂模式、构造函数模式、原型模式) - Python技术站