_proto_ 和 prototype 的区别
任何对象有一个 [prototype] 属性 (隐藏属性), 指向对象原型。
- __proto__ 是每个对象都有的属性, prototype 是函数才有的属性。
- __proto__指向的是当前对象的原型对象,prototype指向的以当前函数作为构造函数构造出来的对象的原型对象。
对象字面量构造的对象
[prototype] 指向Object.prototype
new操作符构造的对象
[prototype] 指向构造函数的prototype (每个函数都有一个prototype属性,所指向对象带有constructor属性)。
函数Object.create构造的对象
var person = {
name : "xxx",
sex : "male"
}
// Person2的[prototype]指向对象person
var person2 = Object.create(person);
Object.create = function(p){
function f(){}
f.prototype = p;
return new f();
}
[prototype] 本身是一个隐藏的属性,很多浏览器给每一个对象提供了 _proto_ 这一属性。
万物皆对象, Function是对象, Function.prototype是对象, 都具有对象的共同特点——有_proto_属性。
Function 特有属性 prototype,指向一个对象(原型对象)
网友评论