日期:2014-05-16  浏览次数:20338 次

constructor的困惑
	function classA() {

}

classA.prototype = {
constructor: function (str) {
console.log(str+'::'+static_member1);
},
static_member1: "classA"
};
alert(classA === classA.prototype.constructor);

始终不明白JavaScript里的constructor,完全不是C++、java里的一样.
当前例子里,这运行结果是false,为啥呀?
如果function那里那个函数和prototype 里指定的constructor不一样,会怎么样?
------解决方案--------------------
	function ClassA() {
 
}
 
ClassA.prototype = {
    //constructor: ClassA, //强制将对象类型转换成ClassA,转换之后alert(cl.constructor == ClassA)为true
    static_member1: "classA"
};
var cl = new ClassA();
alert(cl.constructor == Object) //true
alert(cl.constructor == ClassA) //false

------解决方案--------------------
百度一下javascript原型链 看看就懂了
------解决方案--------------------
false 为啥?
classA.prototype的constructor属性默认是函数classA,你把它改了  constructor当然就和classA不等了。

不一样 会怎么样?
一般情况 不会咋样 对象属性和方法都是在classA和原型中指定的。