前兩天稍微深刻一點點理解了原型和原型鏈,而後就開始有挺多疑問的;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;阮一峯