Javascript之constructor

将今天的小实验记录在此。时间久了,prototype和constructor的区别也分不清了,遂有了如下的小实验。php

1. 打开chrome, 查看window对象html

window.constructor
function Window() { [native code] }
 
window.__proto__
Window {postMessagefunctionclosefunctionblurfunctionfocusfunctionondeviceorientationnull}
 
从这能够看出一些端倪,constructor返回的是一个function, 而prototype返回是一个对象。
 
2. 继续推断,window对象是由constructor指向的这个function产生的。作三个实验,
 
第一个,
//这个function返回一个只有name属性的对象
function objConstructor(){
  return { name:"object" };
}
 
var obj = objConstructor();
 
//如今来检查obj.constructor,是Object对象。
obj.constructor
function Object() { [native code] }
 
第二个
/这个function返回一个只有name属性的对象
function objConstructor(){
 this.name = "object";
}
 
var obj = objConstructor();
 
//如今来检查obj.constructor,错误!没有constructor, obj此时为null。
 
第三个
/这个function返回一个只有name属性的对象
function objConstructor(){
 this.name = "object";
}
 
var obj = new objConstructor();
 
//如今来检查obj.constructor,这个是咱们想要。
obj.constructor
function objConstructor(){  this.name = "object"; }
 
3. 如今来看constructor的定义: The constructor property is a reference to the function that created an object. 怎么建立一个对象?new一个。那你用了建立对象的那个function也就成了constructor。
 
再来想一想为何例子一的constructor是Object对象呢?由于 {name:"object"} 等同于 new Object({name:"object" })。
 
4. 关于constructor和prototype的关系,能够看这个博客,解释的比较清楚:http://www.cnblogs.com/phpmix/articles/1734031.html
 
实际上constructor也是prototype的一个属性: obj.constructor = obj.prototype.constructor。这样就不用太纠结于constructor和prototype了。因此若是objConstructor的prototype改变了,则是有可能影
响obj.constructor的。
例如:
function objConstructor(){
 this.name = "object";
}
 
objConstructor.prototype = new Object({name:"prototype"});
 
var obj = new objConstructor();
 
//如今来检查obj.constructor,constructor变成了Object对象。
obj.constructor
function Object() { [native code] }
相关文章
相关标签/搜索