我所熟悉的创建方式有以下几种:
一、使用对象字面量的方式{}
代码如下:
var person ={
name: "zs",
age: 21,
family: ["lisi","lisa","wangwu"],
}
????????在使用同一接口创建多个对象时,会产生大量重复代码?
二、使用Object 关键字方式来创建?(工厂模式)
代码如下:
var wcDog = new Object();
wcDog.name="旺财";
wcDog.age=3;
wcDog.work();
????????工厂模式解决了重复实例化多个对象的问题,但没有解决对象识别的问题?
三、用构造函数来创建
代码如下:
无参构造函数:
function Person(){
}
var personOne=new Person();
//定义一个 function,如果有 new 关键字去"实例化",那
么该 function 可以看作是一个类
有参构造函数?
function Pet(name,age,hobby){
this.name=name;//this 作用域:当前对象
this.age=age;
this.hobby=hobby;
var maidou =new Pet("麦兜",5,"睡觉"); // 实例化/创建对象
????????可以使用有参构造函数来实现,这样定义更方便,扩展性更强
四、使用原型对象的方式 (prototype 关键字)
代码如下:
function Dog(){ }
Dog.prototype.name ="旺财";
Dog.prototype.eat = function(){
alert(this.name + "是个吃货");
}
var wangcai = new Dog();
wangcai.eat();
var dog2 = new Dog(); //创建实例dog2
dog2.name = "wangwu";
????????原型模式的好处是所有对象实例共享它的属性和方法(即所谓的共有属性)?
????????还可以如上最后两行代码设置自己的属性(方法),可以覆盖原型对象上的同名属性(方法)
五、混合模式(原型和构造函数)?
????????构造函数模式用于定义实例属性,原型模式用于定义方法和共享的属性
代码如下:
function Car(name,price){
this.name=name;
this.price=price;
}
Car.prototype.sell=function(){
alert("我是"+this.name+",我现在卖"+this.price+"万元");
}
var camry = new Car("凯美瑞",27);
camry.sell();
????????可以看出,混合模式共享着对相同方法的引用,又保证了每个实例有自己的私有属性。最大限度的节省了内存?
六、动态原型的方式
相当于混合模式的一种
代码如下:
function Car(name,price){
this.name=name;
this.price=price;
if(typeof Car.sell=="undefined"){
Car.prototype.sell=function(){
alert("我是"+this.name+",我现在卖"+this.price+"万元");
}
Car.sell=true;
}
}
var camry = new Car("凯美瑞",27);
camry.sell();
?
以上几种,是 javascript 中最常用的创建对象的方式
|