我是JavaScript的新手,现在正在尝试使用它。我开始知道JavaScript是基于原型的。我尝试执行以下代码:
var Person = function(name) {
this.name = name;
}
alert(Person.prototype);
var ram = new Person("Ram");
alert(ram.prototype);
正如预期的那样,第一个警告打印 [object,Object] ,我希望第二个警告打印相同,但它没有,为什么?
有什么可以清楚地解释一下吗?
答案 0 :(得分:3)
因为函数上的prototype
属性不是函数的原型,它是一个属性,用于设置通过new
运算符创建的对象的原型那个功能。
您可以使用ES5的Object.getPrototypeOf
:
var Person = function(name) {
this.name = name;
};
alert(Person.prototype);
var ram = new Person("Ram");
alert(Object.getPrototypeOf(ram));
在Firefox和其他几种浏览器上,您可以使用即将推出的ES6功能(适用于浏览器中的JavaScript):__proto__
访问者属性:
var Person = function(name) {
this.name = name;
};
alert(Person.prototype);
var ram = new Person("Ram");
alert(ram.__proto__); // ES6 feature, but already fairly common
请注意,__proto__
是从Object.prototype
继承的属性,因此如果您创建的对象不是从Object.prototype
继承的(例如,var o = Object.create(null);
或使用该属性的任何内容o
作为原型),您只能使用Object.getPrototypeOf
,而不是__proto__
。
答案 1 :(得分:0)
对象prototype
的{{1}}属性是您只能在函数中找到的属性。需要说明的是,在JavaScript中, functions 也是对象,带有自己的原型。但是, functions 还有一个名为Person
的特殊属性,它将成为使用该函数构造的每个对象的原型。