JavaScript原型學習筆記

1.什麼是原型?javascript

原型是一個對象,其餘對象能夠經過它實現屬性繼承。java

這裏有兩個概念,我第一次看原型這塊的時候濛濛的~~過幾天以後就……gg了……函數

prototype(原型)屬性: 咱們建立的每一個函數都有一個prototype屬性,這個屬性是一個指針,指向一個對象,而這個對象包含能夠有特定類型的全部實例共享的屬性和方法。這個對象就是原型對象。spa

簡化一下,每一個函數都有一個prototype屬性,指向函數的原型對象。prototype

看一段代碼3d

1 function Foo() {
2  }
3  Foo.prototype.name = "奧特曼";
4  Foo.prototype.take = function() {
5      var ftake = "打"
6      return ftake;
7  }
8  var obj = new Foo();

默認狀況下全部原型對象都會自動得到一個constructor(構造函數)屬性,這個屬性包含一個指向prototype屬性所在函數的指針。在本例中,原型對象Foo.prototype的constructor屬性指向Foo。指針

原型對象的內部還包括一個指針__proto__指向構造函數的原型對象code

也就是說上例的原型對象是這樣的對象

Foo.prototype
	{
	constructor: Foo,
	__proto__: Object.prototype,
	name:"奧特曼",
	take: function() {
		var ftake = "打"
	    return ftake;
	}
}

 此處應該有圖……我去畫一個……blog

我已經盡力了……真的……我想有朝一日成爲大神看見如今寫的畫的這些鬼……我會羞愧吧……湊合看吧。。。

雖然這圖歪七扭八的,可是,仍是能夠看滴,原型鏈就這麼出來啦!!哈哈

2.原型鏈

首先捏,咱們查找屬性來看一看這個例子的原型鏈。

 obj.name  找到了奧特曼~~

可是呢,name是obj的屬性嗎???

不是捏~~那麼是怎麼回事呢??

當查找一個對象的屬性時,JavaScript 會向上遍歷原型鏈,直到找到給定名稱的屬性爲止,到查找到達原型鏈的頂部 - 也就是 Object.prototype - 可是仍然沒有找到指定的屬性,就會返回 undefined。

那麼若是我給obj.name賦值呢?

obj有了name屬性了,那麼Foo.name是否也改變了呢??

結果是Foo.name並未改變。咱們發現namet是按着咱們所說的向上查找來獲得結果的,屬性在查找的時候是先查找自身的屬性,若是沒有再查找原型,再沒有,再往上走,一直插到Object的原型上.

咱們給obj.name賦值.obj.name = "小怪獸",實例obj就有了name屬性。全部咱們會在屬性查找時找到obj.name,可是Foo.name也並未改變。

而咱們能夠使用toString().hasOwnProperty()等方法也是從原型鏈向上查找到Object原型上的方法~~

 

未完待續~~

相關文章
相關標籤/搜索