/** * Created by sibuk on 2017/6/5. */ //工厂模式 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("Nicholas", 29, "software Engineer"); var person2 = createPerson("Greg", 27, "Doctor"); person1.sayName(); //"Nicholas" person2.sayName(); //"Greg" //构造函数模式 function Person( name, age, job ) { this.name = name; this.age = age; this.job = job; this.sayName = function() { alert(this.name); } } var person1 = new Person("Nicholas", 29, "software Engineer"); var person2 = new Person("Greg", 27, "Doctor"); person1.sayName(); //"Nicholas" person2.sayName(); //"Greg" //原型模式 function Person(){ } Person.prototype.name = "Nicholas"; Person.prototype.age = 29; Person.prototype.job = "software Engineer"; Person.prototype.sayName = function() { alert(this.name); } var person1 = new Person(); person1.sayName(); //"Nicholas" var person2 = new Person(); person2.sayName(); //"Nicholas" alert(person1.sayName == person2.sayName); //true //组合使用构造函数模式和原型模式 function Person( name, age, job ) { this.name = name; this.age = age; this.job = job; this.friends = ["Shelby","Court"]; } Person.prototype = { constructor: Person, sayName: function(){ alert(this.name); } } var person1 = new Person("Nicholas", 29, "software Engineer"); var person2 = new Person("Greg", 27, "Doctor"); person1.friends.push("Van"); alert(person1.friends); //"Shelby,Court,Van" alert(person2.friends); //"Shelby,Court" alert(person1.friends === person2.friends); //false alert(person1.sayName === person2.sayName); //true //动态原型模式 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); } } } var person = new Person("Nicholas", 29, "software Engineer"); person.sayName(); //寄生构造函数模式 function SpecialArray() { //创建数组 var values = new Array(); //添加值 values.push.apply(values,arguments); //添加新方法 values.toPipedString = function(){ return this.join("|"); }; //返回数组 return values; } var colors = new SpecialArray("red","blue","green"); alert(colors.toPipedString()); //"red|blue|green" //稳妥构造函数模式 function Person( name, age, job ) { //创建要返回的对象 var o = new Object(); //可以在这里定义私有变量和函数 //添加方法 o.sayName = function() { alert(name); }; //返回对象 return o; } var person = Person("Nicholas", 29, "software Engineer"); Person.sayName(); //"Nicholas"
JS中创建对象的几种模式
猜你喜欢
转载自blog.csdn.net/mxw322/article/details/72866292
今日推荐
周排行