js物件 原型

2022-03-25 13:42:53 字數 2721 閱讀 1140

物件:在js裡,除了字串,數字,boolean,null和undefined之外,其他的js值都是物件。

js中物件可以分為普通物件和函式物件。

普通物件:是除函式物件外的,都可以成為普通物件。

函式物件:是通過new function產生的物件。

這一種是最常見的定義函式的方法:

function

foo1()

這一種就是定義了乙個匿名函式,然後賦值到foo2  

var foo2=function

而以下這一種是通過物件例項的方式定義了乙個匿名函式,賦值到foo3

var foo3=new function('x','console.log('i'm a function!')');
以上三個都屬於函式物件,不信?咱來瞅瞅:

tvtvtv,前面兩個例子看起來不像是new function建立的啊!那怎麼解釋呢?

其實前面兩個例子是這樣的,因為function是js自帶的物件,所以在foo1,foo2建立時,js就自動通過new function來構建函式啦、

所以上面三個物件都屬於函式物件啦。

再看看普通物件:

這是最簡單建立物件的方式:

var obj1={}
通過new建立並例項化乙個新物件:

var obj2=new object();
通過new建立並例項化了乙個foo1物件:

var obj3=new foo1();
通過object.create()建立乙個物件:

所以以上方式建立的物件,都是屬於普通物件。

說到物件,必然會和物件扯上關係的那肯定是prototype和__proto__啦。

prototype就是原型,每建立乙個函式物件都會內建一些屬性,包括prototype和__proto__,但值得注意的是,普通物件是沒有prototype這個屬性的哦。

讓我們來看看真假:

這裡就是普通物件點出來的屬性,你看沒有prototype吧,再看看函式物件的;

函式物件繼承下來的屬性,明顯要比普通物件的多,你看,那不就有prototype了嗎、

但是呢,prototype對foo1是不可見的,也就是說,foo1是不會查詢prototype上的屬性和方法的。

寫個例子檢驗一下:

function

foo(){};

foo.prototype.name='tv';

console.log(foo.name);

//undefined

prototype的主要作用其實是:繼承。把prototype的屬性和方法都留給自己的後代,子類就可以訪問prototype的屬性和方法啦、

怎麼來解釋上面那張圖呢,

只要建立了乙個新函式,就會給該函式建立乙個prototype屬性,這個prototype屬性時指向該函式的原型物件的,也就是foo.prototype。預設情況,所有的原型物件都會獲得乙個constructor(建構函式)屬性,這個屬性包含乙個指向函式物件上的prototype屬性的指標,這就是為什麼上圖的constructor會指向foo啦

接下來說說:__proto__原型鏈,實現繼承就靠它啦!

__proto__:在普通物件和函式物件上都存在,上面圖點出來的已經很明顯啦。

再寫個例子畫畫圖來理解理解:

function

foo{};

foo.prototype.name='tv';

var test1=new

foo();  //呼叫建構函式建立乙個新例項物件

當呼叫建構函式建立乙個新例項後,例項的內部會包含乙個指標(內部屬性),指向構造的原型物件,ecma-262第5版把這個指標叫[prototype],指令碼中沒有標準的方式訪問[prototype],但是在chrome,firefox等瀏覽器中,都支援乙個屬性__proto__;所以可以把[prototype]當作__proto__,這就形成了例項和函式原型物件的關聯,就實現了繼承啦

所以整個原型鏈繼承下來的效果是這樣的:

JS 物件 JS原型 原型鏈

參考學習 js物件 構造器函式 建立物件的函式。物件分為普通物件和函式物件。所有物件都有 proto 屬性 函式物件不止有 proto 屬性,還有prototype屬性 稱為原型物件 1.new function 產生的物件都是函式物件。2.所有函式物件的 proto 都指向function.pro...

JS原型物件

原型prototype 將函式定義在全域性作用域中的缺點 1.會汙染全域性作用域的命名空間,如 函式functiona 那麼在全域性作用域中就不能再出現functiona這個命名了。2.定義在全域性作用域中不安全。因此,就用到了主角 原型 1.所有的函式都有原型物件 2.當函式以建構函式的形式呼叫時...

js原型物件

在js中,每乙個建立的的函式都會有乙個prototype 屬性,這個屬性指向乙個物件,這個物件就是原型物件 function lla console.log lla.prototype chrome瀏覽器下的結果 首先,當你用new 呼叫了乙個函式,就會建立乙個物件例項然後返回這個物件 可以看到a ...