JS创建对象的七种方式
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JS创建对象的七种方式相关的知识,希望对你有一定的参考价值。
工厂模式
用函数来封装以特定接口创建的对象,可以无数次调用该函数
function creatPerson (name,age) { var o = new Object (); o.name = name; o.age = age; o.sayAge = function () { console.log (this.age); }; return o; } var person1 = creatPerson ("John",22); var person2 = creatPerson ("Amy",15);
缺点:无法知道对象类型
构造函数模式
自定义对象类型的属性和方法(构造函数始终以大写字母开头)
function Person (name,age) { this.name = name; this.age = age; this.sayAge = function () { console.log (this,age); } } var person1 = new Person ("John",22); var person2 = new Person ("Amy",15);
person1和person2既是Object对象,也是Person对象
缺点:每个方法都要在是实例上重新创建一次,占用内存空间(不同实例上的同名函数是不相等的)
原型模式
只要创建了一个新的函数,就会为该函数创建一个prototype属性,该属性是一个指针,指向函数的原型对象,原型对象的constructor属性指向构造函数。我们在原型对象中添加属性和方法。构造函数与实例无直接关系,实例中的指针仅指向原型,不指向构造函数。
function Person () { } Person.prototype = { name : "John", age = 30, sayAge : function () { console.log (this.age); } }
缺点:修改原型对象导致 所有实例的该属性全部被修改,没有自己独有的属性。
组合使用构造函数和原型模式
创建自定义类型最常见的模式。使用构造函数定义实例属性,使用原型模式定义方法和共享属性。
function Person (name,age) { this,name = name; this.age = age; } Person.prototype = { constructor : Person, sayAge : function () { console.log (this.name); } }
动态原型模式
将所有信息封装在构造函数中,在构造函数中初始化原型。
function Person (name,age) { this.name = name; this.age = age; //在sayAge不存在的情况下添加到原型中,只在初次调用构造函数时执行 if (typeof this.name != "function") { Person.prototype.sayAge = function () { console.log (this.age); } } }
寄生构造函数模式
与工厂模式相仿。函数仅仅封装创建对象的代码,返回新创建的对象。返回的对象与构造函数或者原型属性之间没有联系。
function Person (name,age) { var o = new Object (); o.name = name; o.age = age; o.sayAge = function () { console.log (this.age); }; return o; } var friend = new Person ("John",25);
缺点:无法知道对象类型
稳妥构造函数模式
稳妥对象指没有公共属性的对象。适合在安全环境或者防止数据被改动时使用。属性只能通过方法来访问,直接访问不到。
function Person(name, age) { var o = new Object(); o.sayName = function() { //只有这里可以访问name,其他地方未定义name属性 console.log(name); }; o.setName = function(value) { name = value; }; return o; }; var friend = Person("Nicholas", 29); friend.sayName(); //Nicholas
缺点:无法知道对象类型
以上是关于JS创建对象的七种方式的主要内容,如果未能解决你的问题,请参考以下文章