应用构造函数属性没有结果

时间:2013-12-16 01:16:07

标签: javascript

我明确定义了刚创建的对象的构造函数属性,如下所示:

var fooProto={foo:"prototype"};
function f(){ };
f.prototype=fooProto;
var object= new f();
object.constructor.prototype.bar="bar";
console.log(object.foo, Object.prototype.bar);

在控制台中我们有prototype,bar,但我明确undefined,undifined。请解释它为什么会发生?

1 个答案:

答案 0 :(得分:1)

您正在向Object.prototype添加栏:

console.log(fooProto.constructor===Object);//true
console.log(object.constructor.prototype===fooProto);//true

设置f()的原型后,你应该修复构造函数:

f.prototype=...;
f.prototype.constructor=f;

如果您期望未定义,未定义,那么我刚才回答为什么第二个不打印未定义。

为什么第一个未定义未在构造函数的介绍中回答here。简短的回答;当你在一个对象上请求成员并且该对象没有该成员/属性时,JS将在创建该对象的构造函数的原型上查找它。

例如:

var test = {};
console.log(test.hasOwnProperty);//=hasOwnProperty(), not undefined

测试没有hasOwnProperty所以它来自哪里?

console.log(test.constructor);//=Object()
console.log(test.constructor.prototype.hasOwnProperty
  ===test.hasOwnProperty);//=true

所以测试从Object.prototype得到hasOwnProperty而Object是测试的构造函数