码迷,mamicode.com
首页 > 其他好文 > 详细

面向对象相关

时间:2015-07-08 20:37:13      阅读:107      评论:0      收藏:0      [点我收藏+]

标签:

创建对象

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!