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

js中constructor属性的问题。
先看第一段代码:
function Person(name) {
this.name = name;
};
Person.prototype.getName = function() {
return this.name;
};
var p = new Person("ZhangSan");

console.log(p.constructor === Person); // true
console.log(Person.prototype.constructor === Person); // true
其实p对象生成时并没有constructor属性,当访问constructor属性时,会向原型链上查找constructor属性。
第二段代码:
<html>
<body>
<script type="text/javascript">
function Users(){
}
Users.prototype=5;
var u=new Users();
console.log(u.constructor);
</script>
</body>
</html>
输出的是Object();
可是u对象没有constructor属性,当访问u.constructor时找不到,就会向Users.prototype指向的对象(prototype对象中有个constructor属性)中查找,但是现在Users.prototype=5;所以,理论上console.log(u.constructor);应该输出Number()类型的。这是怎么回事?教程上说constructor属性指向构造函数的,不知道内部怎么实现的,请分析下。
javascript js constructor

------解决方案--------------------
Users.prototype=5;
上面这句会使constructor指向Object,一般使用下面种形式后
Users.prototype = {
    getName:function(){
},setName:function(){
}
}

还要再加一句
Users.prototype.constructor = Users;
不然实例访问constructor的时候就得不到想要的结果。
------解决方案--------------------
Person.prototype.getName=xxx;
Users.prototype=5;
你没注意到这两个根本不是一回事么 一个原型prototype中的属性 一个直接覆盖原型
------解决方案--------------------
你觉得是一回事吗?
Person.prototype.getName=xxx;
这个是给原型添加一个属性,属性值为xxxx
Users.prototype=5;
这个是重新指定原型。


------解决方案--------------------
引用:
Person.prototype.getName=xxx;
Users.prototype=5;
你没注意到这两个根本不是一回事么 一个原型prototype中的属性 一个直接覆盖原型


看错了,请无视上面的回复。