JS中多种方式创建对象

1.内置对象创建

var girl=new Object();
    girl.name='hxl';
    console.log(typeof girl);

2.工厂模式,寄生构造函数模式

function Person(name){
        var p=new Object();//内部进行实例化
        p.name=name;
        p.say=function(){
            console.log('my name is '+ p.name);
        }
        return p;//注:一定要返回
}
var girl=Person('haoxioli');
girl.say();

3.构造函数创建

var Product=function(name){
        this.name=name;
        this.buy=function(){
            console.log('我衣服的牌子是'+this.name);
        }
}
    var pro=new Product('真维斯');
    pro.buy();

4.原型创建,缺点:实例中的每个属性有可能会不一样

var Role=function(){}
    Role.prototype.name={nickName:'昵称'};
    var boy=new Role();
    boy.name.nickName='刘晓兵';
    console.log(boy.name.nickName);//刘晓兵
    var girl=new Role();
    girl.name.nickName='郝晓利';
    console.log(boy.name.nickName);//郝晓利,因为实例对象可以修改原型中的引用对象的值
    console.log(girl.name.nickName);//郝晓利

5.混合模式:原型+构造,可以把不让实例修改的属性放到构造函数中,可以修改的放原型中

var Role=function(){
        this.name={nickName:'aaa'};
    }
    Role.prototype.age=30;
    var boy=new Role();
    boy.name.nickName='boy';
    console.log(boy.name.nickName);//boy
    var girl=new Role();
    girl.name.nickName='girl';
    console.log(boy.name.nickName);//boy,实例不会修改构造函数中的值
    console.log(girl.name.nickName);//girl

6.字面量形式

var cat={
        name:'lucy',
        age:3,
        sex:'母'
    };//将对象转换成字符串
    console.log(JSON.stringify(cat));//{"name":"lucy","age":3,"sex":"母"}
    var dog='{"name":"john","sex":"公"}';
    console.log(JSON.parse(dog).name);//将字符串转为对象

7.拷贝模式

function extend(tar,source){
        for(var i in source){
            tar[i]=source[i];
        }
        return tar;
    }
    var boy={name:'醉侠客',age:20};
    var person=extend({},boy);
    console.log(person.name);

8.第三方框架

//先引入包
<script src='js/base2.js'></script>
//base2框架,Base.extend及constructor都是固定用法
    var Animal=Base.extend({
        constructor:function(name){
            this.name=name;
        },
        say:function(meg){
            console.log(this.name+":"+meg);
        }
    });
    new Animal('lily').say('fish');

另一个第三方框架

<script src='js/simplejavascriptinheritance.js'></script>
//simplejavascriptinheritance框架,Class.extend及init都是固定用法
    var Person=Class.extend({
       init:function(name){
           this.name=name;
       }
    });
    var p=new Person();
    p.name='over';
    console.log(p.name);

  

  

  

作者:haoxl
出版:http://www.cnblogs.com/haoxl/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。

原文地址:https://www.cnblogs.com/haoxl/p/5250245.html