以下代码,我使用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"
为什么构造函数不能访问他的原型属性,但可以访问父原型(他的原型的原型)属性。
答案 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.m
,A
(注意,大写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"
确实有效,因为A
是Function
对象的一个实例。