`

JavaScript对new的一些理解

阅读更多

先举个简单的例子:

function createPerson(name,sex,birthday) {   
        //通过参数传递赋予函数对象值
        this.name = name ;
        this.sex = sex;
        this.birthday = birthday;
        return this;   
}    
createPerson.prototype.sayHi =  function(){  
       alert(this.name+"  is saying hello to everyone.");  
 };

 然后,我们new一个实例,

var rose = new createPerson('Rose ','female','1985-01-01');

这样new createPerson()的过程可以归纳为三点:

       第一步: 是建立一个新对象-rose

       第二步 将该对象内置的原型对象设置为构造函数prototype引用的那个原型对象,也就是因为JS每个函数,都具有原型对象如 (createPeson.prototype)。这就是说rose对象的原型对象设置为构造函数createPeson.prototype

  第三步: 就是将该对象作为this参数调用构造函数,完成成员设置等初始化工作。

 

这时,我们调用

rose.sayHi();

结果是:

   Rose is saying hello to everyone.

 

 

------------------------------------------------------分割线--------------------------------------------------------------------

如果我们不使用new,

var rose1 = createPerson('Rose ','female','1985-01-01');

这时,我们调用

rose1.sayHi();

这时执行出错,rose1对象是没有这个sayHi()方法的,因为没执行“第二步 ”。

 

------------------------------------------------------分割线--------------------------------------------------------------------

我们再使用一种形式:

var rose1 = createPerson('Rose ','female','1985-01-01');
var peter1 = createPerson('Peter','male','1985-03-11');

这时,我们调用

rose1.sayHi();
peter1.sayHi();

结果是:

Peter is saying hello to everyone.

Peter is saying hello to everyone.

结论:

没有使用new,就没有执行“第一步 ,在加载页面时,createPerson()只解析一次.随后无论参数的变化如何,调用次数多少:使用的都是同一个函数对象。

 

 

另外:关于function的返回值,如果function的返回值是对象的话则返回该对象,否则返回function的实例

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics