JavaScript Protoype混乱

时间:2015-06-04 16:39:25

标签: javascript prototype

我是JavaScript的新手,现在正在尝试使用它。我开始知道JavaScript是基于原型的。我尝试执行以下代码:

var Person = function(name) {   
    this.name = name;
}
alert(Person.prototype);
var ram = new Person("Ram"); 
alert(ram.prototype); 

正如预期的那样,第一个警告打印 [object,Object] ,我希望第二个警告打印相同,但它没有,为什么?

有什么可以清楚地解释一下吗?

2 个答案:

答案 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的特殊属性,它将成为使用该函数构造的每个对象的原型