为什么构造函数不能访问他原型的属性,但可以访问父原型的属性(原型的原型)

时间:2015-04-19 08:04:18

标签: javascript

以下代码,我使用Chrome浏览器控制台检查:

function A(){
  this.a='a'
}

这是一个构造函数function.i已将属性b绑定到A的原型。

A.prototype.b='b';

但是当我使用构造函数b访问A属性时。它显示undefined

A.b //it return undefined

我再次将属性m分配给Function.prototype,并使用A进行访问,返回coorect vaue。

Function.prototype.m='m';
A.m //it return "m"

为什么构造函数不能访问他的原型属性,但可以访问父原型(他的原型的原型)属性

2 个答案:

答案 0 :(得分:2)

您无法访问A.prototype.b,因为您尚未实例化A。原型是created during the instantiation of an Object的对象。在您的示例中,这可能是这样的:

// Create your constructor and prototype object
function A() {}
A.prototype = {
  b: "b"
};

var a = new A();
console.log(a.b); 
>>> "b"

但是,对于A.mA(注意,大写A,您的构造函数), Function的实例,因此继承所有这些属性,包括您添加的属性。

有关更多信息,建议您查看introduction to Object-Oriented JavaScript

上的MDN文章

答案 1 :(得分:1)

您无法以A.b的身份访问它,因为A不是A构造函数的实例。你需要:

var instanceA = new A();
instanceA.b; // will work

尽管

Function.prototype.m='m';
A.m //it return "m"

确实有效,因为AFunction对象的一个​​实例。