javascript对象创建----六大步靠齐java

以下是我们可以创建出js对象的六大方法,其中第五六种是我们在开发中应该常用到的,前面四种是我们应该避免的。
1、最传统的:
var person = new Object();
    person.name = "hmj";
    person.age = 25;
    person.showMsg = function(){
        alert("name:"+this.name+";age:"+this.age)
    }

用法:
    person.showMsg();




2、工厂模式创建:
工厂就是生产对象的地方,在这里是一个方法。这个方法能批量创建对象。
function createPerson(name,age){
    var person = new Option();
    person.name = name;
    person.age = age;
    person.showMsg = function(){
        alert("name:"+person.name+";age:"+person.age);
    }
    return person;
}

用法:
var person = createPerson("hmj",25);

person.showMsg();
说明:在这里我们批量地创建对象的并初始化对象方法的时候,每次都会创建新的函数,这会造成对内存的浪费。
我们可以把这个函数提取出来,只需要把对象的属性指向这个方法的引用即可。

3、构造方法模式:
因为js的开发越来越正规,创建对象时却没有引起足够重视。传统的面向对象创建对象都是非常正规的比方说:类首字母大写,
使用构造行数,使用new关键字创建对象。
function Person(name,age){
    this.name = name;
    this.age = age;
    thhi.showMsg = function(){
        alert(this.name + this.age);
    }
}

同上,创建每个对象都会创建一个函数,为了避免出现这种情况,我们可以写成如下:
function Person(name.age){
    this.name = name;
    this.age = age;
    this.showMsg = showMsg;
}
function showMsg(){
    alert(this.name+this.age);
}

用法:
var person = new Person("hmj",25);
person.showMsg();


对构造函数的解释:构造函数,顾名思义就是生产函数的一个函数。当代码运行到行数内部的时候会首先创造一个对象,且这个对象只有this能够访问。
当我们的构造函数通过this对这个对象进行一系列操作后,在行数执行的最后,隐式返回这个对象。这就是为什么构造函数不需要返回值的原因(java也是一样吧)。

4、利用原型的方法构造对象,利用对象的prototype属性。
function person(){};
person.prototype.name = "name";
person.prototype.age = 25;
person.prototype.showMsg = function(){
    alert(this.name+this.age);
}

用法:
引用
person.showMsg();

优点:所有的方法和属性从语义上属于person这个对象,而且这样的对象能够通过instanceof来判断类型。
缺点:不能传参。

5、混合的原型/构造函数模式:
这样做能解决上述不能传参的问题,同时保留上述优点。
function Person(name,age){
    this.name = name;
    this.age = age;
}
Person.prototype.showMsg = function(){
    alert(this.name+this.age);
}

用法:
var person = new Person("hmj",25);
person.showMsg();


6、动态原型模式:
因为还是存在一部分完美主义者认面向对象的程序不应该存在类的方法和类不在同一块,js也应该和java一样属性和方法都在类内,动态原型模式正好解决了这个问题:
function Person(namem,age){
    this.name = name;
    this.age = age;
    if(typeof this.initlized == "undefined"){
        Person.prototype.showMsg = function(){
            alert(this.name+this.age);
        }
        this.initlized = true;
    }
}

用法:
var person = new Person("hmj",25);
person.showMsg();

这样创建一个类,就相对比较完美了。有点java的感觉了吧?

你可能感兴趣的:(JavaScript,java,prototype)