原文地址:https://github.com/vino24/blog/issues/88
var person = new Object(); person.name = "vino24"; person.age = 22; person.job = "FE Engineer"; person.sayName = function() { alert(this.name); }
创建很多对象时,会产生大量重复代码
抽象出创建具体对象的过程,在JavaScript中以函数来封装特定接口创建对象的细节。
function createPerson(name,age,job) { var o= new Object(); o.name = name; o.age = age; o.job = job; o.sayName = function() { alert(this.name); }; return o; } var person1=createPerson("vino24",22,"FE"); person1.sayName();
没有解决对象识别的问题
function Person(name,age,job) { this.name = name; this.age = age; this.job = job; this.sayName=function() { alert(this.name); }; } var person1 = new Person("vino24",22,"FE"); person1.sayName();
构造函数中的方法都要在每个实例上创建一遍
function Person() { } Person.prototype = { constructor:Person, name:"vino24", age:22; job:"FE", sayName:function() { alert(this.name); } }; var person1=new Person(); Person.sayName();
所有的实例都会共享其属性和方法
构造函数用于定义实例属性,而原型模式用于定义方法和共享属性
function Person(name,age,job) { this.name = name; this.age = age; this.job = job; this.friends = ["vino","kobe"]; } Person.prototype = { constructor : Person, sayName : function() { alert(this.name); } } var Person1 = new Person("vino24",22,"FE");
function Person(name,age,job) { this.name = name; this.age = age; this.job = job; if(typeof this.sayName != "function") { Person.prototype.sayName = function() { alert(this.name); }; } }
1. 最初
缺陷:
2. 工厂模式
缺陷:
3. 构造函数模式
· 构造函数模式与工厂模式区别:
使用new操作符创建对象的过程:
· 缺陷:
4.原型模式
缺陷:
5.组合使用构造函数模式和原型模式
6.动态原型模式