39 javaScript创建对象的方式
1 使用json方式创建对象
通过json创建对象,对象有自己的属性(年龄、姓名、性别等)和行为(吃饭、睡觉、走路、讲课等)。
推荐使用的场合: 作为函数的参数,临时只用一次的场景。比如设置函数原型对象。
缺点: 不能作为对象创建的模板,也就是不能用new进行构造新对象。
// 定义
var obj = {};
var obj2 = {
name: 'laoma',
age: 18,
sayHi: function(){
console.log( name + 'say hi' );
}
};
//添加其他属性:
obj2.newProp = 123;// js的动态特性,如果没有要访问的属性,直接添加属性。
2 创建面向对象的方式new Object()
var obj3 = new Object();
//添加属性
obj3.name = 'kitty';
obj3.sayHi = function() {
console.log( name + ' ' + 'say hi');
};
跟json方式创建对象的方式一样,只能临时用一下这个对象,不能作为对象创建的模板使用,因此不推荐使用。
3 构造函数构造对象方法
把一个函数对象当做构造函数来使用,一般要把函数对象的首字母大写
3.1 方式一
function Persion() {
this.name = '123'; // 通过this可以直接给 构造出来的对象添加属性。
this.sayHi = function() {
console.log( this.name );
};
}
Persion.prototype.sayHello = function(){
console.log('123');
}
var p = new Persion();
使用方式一,对象的内部的函数会在每个对象中都存一份。如果创建的对象非常多的话,那么非常浪费内存。函数的行为是所有对象。可以共有,不需要每个对象都保存一份。所以,可以把函数放到原型中。进行声明,那么所有对象都有了公共的函数,而且内存中只保留一份。
3.2 方式二
function Persion(sname, sage) {
this.name = sname || '123';
this.age = sage || 19;
}
Persion.prototype = {
sayHi: function() {
},
_init: function() {
}
};
使用方式二,调用者如果传递参数的顺序发生变化,那么该方式不方便维护。
3.3 方式三
function Persion( option ) { //我用一个对象把所有参数覆盖。灵活性就很强了。
//顺序无所谓,添加参数也无所谓了。
this._init( option );
}
Persion.prototype = {
sayHi: function() {
},
_init: function( option ) {
this.name = option.sname || '';
this.age = option.sage || 18;
}
};
构造函数构造对象时,推荐使用,方式三。私有的需要给外部访问的方法,建议使用"_"进行区分。