标签:
创建对象
js创建对象的方法有几种:
1,工厂模式。
2,构造函数模式。
3,原型模式。
4,组合使用构造函数模式和原型模式
(一):工厂模式
function createPerson (name){ var obj = new Object(); obj.name = name; obj.show = function(){ alert(this.name); } return obj; } var person = createPerson("ym"); //不需要使用new person.show();
(二),构造函数模式:
构造函数的函数名大写开头,其他函数都是小写
//构造函数模式 function Person(name, age){ this.name = name; var sex = sex //私有 this.show = function(){ alert(sex); } } var person1 = new Person("ym", "nan"); alert(person1.name); //ym alert(person2.sex) //undefined person1.show(); //nan
//构造方法模式与工厂模式的区别:
1,没有显示创建对象。
2,直接赋值给 this 对象。
3,没有 return 语句。
//构造函数的问题:
当对象有多个实例时,这些实例的所有方法都是不同的,因为它都会创建一遍。
//构造函数模式 function Person(name, sex){ this.name = name; var sex = sex; //私有 this.show = function(){ alert(sex); } } var person1 = new Person(‘ym‘, ‘nan‘); var person2 = new Person(‘jh‘, ‘nv‘); // alert(person1 instanceof Person); //true alert(person1.show == person2.show); //false
(三),原型模式
//优点:可以让所有对象实例共享它所包含的属性和方法。
// 6、原型模式 function Person2(){} Person2.prototype = { name : "ym", sex : ‘nan‘, show : function(){ alert(this.name); } } var a = new Person2(); var b = new Person2(); alert(a.show == b.show); //true
//原型模式的问题:
function Person2(){} Person2.prototype = { name : "ym", sex : ‘nan‘, love : [‘a‘, ‘b‘], show : function(){ alert(this.name); } } var a = new Person2(); a.love.push(‘c‘); var b = new Person2(); a.love.push(‘d‘); // alert(a.show == b.show); alert(a.love); //abcd alert(b.love); //abcd
(四)、组合使用原型模式和构造函数模式
//通过以上的例子我们可以知道,构造函数模式,创建的方法都是不同的,都是实例自己拥有的,而原型模式定义的属性和方法是共享的,那么结合起来使用真是perfect。
// 6、混合模式 function Perfect(name, sex){ this.name = name; this.sex = sex; this.love = [‘a‘ , ‘b‘]; } Perfect.prototype = { constructor : Perfect, show : function(){ alert(this.love); } } var a = new Perfect(‘a‘, ‘nan‘); var b = new Perfect(‘b‘, ‘nv‘); a.love.push(‘c‘); b.love.push(‘d‘); a.show(); //abc b.show(); //abd
标签:
原文地址:http://www.cnblogs.com/mystudy/p/4631003.html