JavaScript 几种对象创建方法

2015-11-27 0 By admin

一、内置构造函数

使用new关键词创建一个对象;然后再为对象添加属性和方法。
var student = new Object();
student .name = "mayun";
student .age = 20;
student .action = function() {
console.log(this.name + ":good good study");}

二、使用对象字面量创建

简单明了的直接定义,声明,直接实例化。
这种方法每次只能创建一个对象,代码复用性差,冗余度高。不推荐使用。
var stu = {
name : "mayun",
age : 20,
action : function() {
console.log(this.name + ":good good study");}}

三、工厂函数

如果一个类(对象模板)要实例化很多对象,可以使用工厂函数。
function createstu(name, age) {
var o = new Object();
o.name = name;
o.age = age;
o.action = function() {
alert(this.name + ":good good study");}
return o;}

实例化两个对象:
var stu1 = createstu("hanmeimei",12);
var stu2 = createstu("ligoudan",12);

使用封装的工厂函数,需要在工厂函数内部new一个对象。这样的话,每使用一次工厂函数,就会创建(new)一个对象。

四、构造函数

构造函数是一个特殊的函数,其作用就是用来初始化对象;并且和new关键词同时出现。
function stu(name,age){
this.name = name;
this.age = age;
this.action = function(){
alert(this.name + ":good good study");}}

实例化两个对象:
var stu1 = new stu("vivian",13);
var stu2 = new stu("vivian2",13);

1、构造函数的执行过程:

  1. 使用new关键字创建对象。
  2. 调用构造函数,把新创建出来的对象赋值给构造函数内的this。
  3. 在构造函数内使用this为新创建出来的对象新增成员。
  4. 默认返回新创建的这个对象 (普通的函数,如果不写返回语句,会返回undefined)。

2、构造函数的返回值:

  1. 如果不写返回值,默认返回的是新创建出来的对象 (一般都不会去写这个return语句)。
  2. 如果我们自己写return语句 return的是空值(return;),或者是基本类型的值或者null,都会默认返回新创建出来的对象。
  3. 如果返回的是object类型的值,将不会返回刚才新创建的对象,取而代之的是return后面的值。

使用以上的方法创建对象,会发现两个实例中的action方法不是同一个Function的实例。
console.log(stu1.action == stu2.action); //false
为了使代码更合理,可以使实例引用同一个Function实例。

五、优化action函数放到构造函数外面声明

function stu(name,age){
this.name = name;
this.age = age;
this.action = action}
function action(){
alert(this.name + ":good good study");}