淺談js建構函式的方法與原型prototype,建構函式prototype

來源:互聯網
上載者:User

淺談js建構函式的方法與原型prototype,建構函式prototype

把方法寫在建構函式內的情況我們簡稱為函數內方法,把方法寫在prototype屬性上的情況我們簡稱為prototype上的方法。

•函數內的方法: 使用函數內的方法我們可以訪問到函數內部的私人變數,如果我們通過建構函式new出來的對象需要我們操作建構函式內部的私人變數的話, 我們這個時候就要考慮使用函數內的方法.

•prototype上的方法: 當我們需要通過一個函數建立大量的對象,並且這些對象還都有許多的方法的時候;這時我們就要考慮在函數的prototype上添加這些方法. 這種情況下我們代碼的記憶體佔用就比較小.

•在實際的應用中,這兩種方法往往是結合使用的;所以我們要首先瞭解我們需要的是什麼,然後再去選擇如何使用

// 建構函式Afunction A(name) {  this.name = name || 'a';  this.sayHello = function() {    console.log('Hello, my name is: ' + this.name);  }}// 建構函式Bfunction B(name) {  this.name = name || 'b';}B.prototype.sayHello = function() {  console.log('Hello, my name is: ' + this.name);};var a1 = new A('a1');var a2 = new A('a2');a1.sayHello();a2.sayHello();var b1 = new B('b1');var b2 = new B('b2');b1.sayHello();b2.sayHello();

寫了兩個建構函式,第一個是A,這個建構函式裡麵包含了一個方法sayHello;第二個是建構函式B, 我們把那個方法sayHello寫在了建構函式B的prototype屬性上面.把方法寫在建構函式的內部,增加了通過建構函式初始化一個對象的成本,把方法寫在prototype屬性上就有效減少了這種成本. 你也許會覺得,調用對象上的方法要比調用它的原型鏈上的方法快得多,其實並不是這樣的,如果你的那個對象上面不是有很多的原型的話,它們的速度其實是差不多的

另外,需要注意的一些地方:

•首先如果是在函數的prototype屬性上定義方法的話,要牢記一點,如果你改變某個方法,那麼由這個建構函式產生的所有對象的那個方法都會被改變.

•還有一點就是變數提升的問題,我們可以稍微的看一下下面的代碼:

func1(); // 這裡會報錯,因為在函數執行的時候,func1還沒有被賦值. error: func1 is not a functionvar func1 = function() {  console.log('func1');};func2(); // 這個會被正確執行,因為函數的聲明會被提升.function func2() {  console.log('func2');}

•關於對象序列化的問題.定義在函數的prototype上的屬性不會被序列化,可以看下面的代碼:

function A(name) {  this.name = name;}A.prototype.sayWhat = 'say what...';var a = new A('dreamapple');console.log(JSON.stringify(a));

我們可以看到輸出結果是{"name":"dreamapple"}

以上這篇淺談js建構函式的方法與原型prototype就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援幫客之家。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.