1. 程式人生 > >prototype和_proto_淺析

prototype和_proto_淺析

JS的原型分成兩類:隱式原型和顯示原型

顯示原型只有函式有,隱式原型所有物件都有

_proto_是實現繼承的原理, 通過_proto_指向實現繼承

1.預設情況

function person(name) {
    this.name = name;
}
var person1 = new person();

person1.prototype._proto_ = person.prototype

person.prototype._proto_ = Object.prototype

2.其他情況

function Bar(){}
function Foo(){}

Foo.prototype = new Bar() (通過new 例項建構函式實現繼承)

Foo.prototype.__proto__ === Bar.prototype


================================================================
function Foo(){}
//我們不想讓Foo繼承誰,但是我們要自己重新定義Foo.prototype
Foo.prototype = {
  a:10,
  b:-10
}
//這種方式就是用了物件字面量的方式來建立一個物件
Foo.prototype.__proto__ === Object.prototype
console.log(Foo.prototype.constructor);	//[Function: Object]

總結:

 也就是說,通過物件字面量構造出來的物件,其__proto__都是指向Object.prototype

 通過new操作符呼叫的函式就是建構函式。由建構函式構造的物件,其__proto__指向其建構函式的原型物件。