JavaScript構造函數、繼承的理解

前兩天稍微深刻一點點理解了原型和原型鏈,而後就開始有挺多疑問的;javascript

function dog() {
   this.name = "huahua";
}
var  cat = new dog();
console.log(cat.name); //huahua

按照原型鏈繼承,cat是dog的實例,cat會繼承dog的原型對象的屬性纔對,爲何cat.name又能繼承dog的屬性呢?html

通過簡單的百度,這個問題仍是解決了的,咱們須要分析一下構造函數實例化的過程是如何的:java

一、建立一個空的cat對象;app

二、cat.__proto__ = dog.prototype;函數

三、dog.call(cat);this

四、return cat;prototype

關鍵在於第三步,將dog的this指向了cat,所以cat.name爲huahua;htm

說到這裏順便總結一下this的內容,共四種狀況:對象

一、通常函數中this指向全局對象;blog

二、做爲對象的方法時,函數內部的this指向該對象;

三、做爲構造函數,this指向new的實例對象;

四、apply和call時,this指向參數對象;

 

javascript定義類的方法:http://www.ruanyifeng.com/blog/2012/07/three_ways_to_define_a_javascript_class.html;阮一峯

相關文章
相關標籤/搜索