js之对象创建方式
js中对象创建方式有多种,最常见的就是调用Object构造函数,下面我们来列举对象的创建的方式
一、Object构造
var Dog = new Object(); Dog.name = "peter"; Dog.bark =function(){ console.log(" my name is "+Dog.name); } Dog.bark();//输出my name is peter
此方法是最常见的生成方式,但不能指定想要的对象类型
二、字面量构造
var Cat = { name:"tony", age :"5", bark : function(){ console.log("i am a cat" ); } } Cat.bark();
此方法是上面的补充,他与new Object()没有区别
三、工厂模式创建
function createObj(name,age){ var obj = new Object(); obj.name = name; obj.age = age; obj.bark = function(){ console.log("hello i am createObj,i am "+obj.age+" old"); } return obj; //返回一个obj }
var obj = createObj("pony","33");
obj.bark();
此方法适合批量生成对象,避免代码重复,但问题和第一个一样,不能判断对象类型,因为都是基类Object
四、构造函数创建
function Person(name,age){ this.name = name; this.age = age; this.bark = function(){ console.log("hello i am construct"); } } var child = new Person("sily","18"); console.log(child.name);
此方法中的new关键字很重要,首先他会在内部常见一个object赋给this 然后通过this绑定变量和方法,最后隐式的return this 出去。
此方法的缺点是每次创建对象的时候后都会生成相应的方法,浪费内存
五、原型创建
function Animal(){} Animal.prototype.name = "peter"; Animal.prototype.age = 10; Animal.prototype.bark = function(){ console.log("hello, i am a prototype function"); } var fish = new Animal(); fish.bark();
该方法创建的对象,都在原型链上,所有实例共享,也就是说,一旦有实例修改了该方法,则所有实例的该方法都会改变,但大多数时候我们还是需要私有方法和属性,说以一般都用原型构造这种组合模式来创建对象