How to create objects in js

1. object
//利用内置对象形式创建
var boy = new Object();
//属性
boy.name = '哈哈';
//属性
boy.image = '男性头像';
//属性
boy.HealthPoint_HP = 100;
//属性
boy.MagicPoint_MP = 100;
//技能
boy.technologys =[];
//方法
boy.attack = function(){
}
缺点:重复太多
2.工厂方式(原料加工)
 function createPerson(name){
            //1.原料
            var obj = new Object();
            //2.加工
            obj.name = name;
            obj.HP=100;
            obj.MP=100;
            obj.technologys=['普通攻击','横扫千军','地狱火','漫天飞雪'];
            obj.attack = function(){
                alert(obj.name+'发出攻击,导致对方10点伤害值')
            };
            obj.run = function(){
            };
            //3.出场
            return obj;

        }

 var boy = createPerson('剑侠客');
 boy.attack();
 var girl = createPerson('炫舞天使');
 girl.attack();
缺点:适用于不用修改任何对象内部的任何值的情况
3.构造函数
 var Role =function(name) {
        this.name=name;
        this.name2={nickName:'小二',accountName:'[email protected]'}
        this.age=1111;
        this.attack=function() {
             alert('11111');
        }   
    }
 var girl  = new Role('宝宝')
缺点:方法是所有实例都一样的,每次实例都重新分配内存,造成内存浪费
4.Prototype创建对象
  var Role =function() {}
    /*姓名*/
  Role.prototype.name={nickName:'小二',accountName:'[email protected]'}
 /*引用类型有问题*/
   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:'小二',accountName:'[email protected]'};
    }
    /*姓名*/
    //生命值
    Role.prototype.HP=100;
    //魔法值
    Role.prototype.MP=100;
    //技能
    Role.prototype.technologys=['普通攻击','横扫千军','地狱火','漫天飞雪'];
    //跑起来
    Role.prototype.run=function() {
        alert('run');
    }

    /*引用类型有问题 -- 通过混合方式解决*/
   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)-------小四

6.拷贝创建对象(遍历A对象的每个属性,以此赋值给另一个空对象)
  function extend(tar,source) {
        //遍历对象
        for(var i in source){
            tar[i] = source[i];
        }
        return tar;
    }

7.字面量形式
 var boy = {
        name:'小二'
        ,image:'男性头像'
        ,age:20
        ,sex:'男'
        ,HP:100
        ,MP:100
        ,technologys:['普通攻击','横扫千军','地狱火','漫天飞雪']
    };

//将对象转换成字符串
console.log(JSON.stringify(boy));


//将字符换转换成json对象
var sboy='{"name":"小二","sex":"男","HP":100}';
var objBoy = JSON.parse(sboy);


8.ECMAScript5 新添方法
var person = {
  name : "chen",
  sayName : function(){
    alert(this.name);
  }
}
var myPerson = Object.create(person);
myPerson.sayName() //chen

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=325387398&siteId=291194637