JS構造函數(shù)與原型prototype的區(qū)別介紹
構造函數(shù)方法很好用,但是存在一個浪費內存
通過原型法分配的函數(shù)是所有對象共享的.
通過原型法分配的屬性是獨立.-----如果你不修改屬性,他們是共享
如果我們希望所有的對象使用同一一個函數(shù),最好使用原型法添加函數(shù),這樣比較節(jié)省內存.
例子:
//----構造函數(shù)模式
為Cat對象添加一個不變的屬性"type"(種類),再添加一個方法eat(吃老鼠)。那么,原型對象Cat就變成了下面這樣:
<script>
function Cat(name, color) {
this.name = name;
this.color = color;
this.type = "貓科動物";
this.eat = function () {
alert("吃老鼠");
};
}
//生成實例:
var cat1 = new Cat("大毛", "黃色");
var cat2 = new Cat("二毛", "黑色");
alert(cat1.type); // 貓科動物
cat1.eat(); // 吃老鼠
alert(cat1.eat == cat2.eat); //false
</script>
那就是對于每一個實例對象,type屬性和eat()方法都是一模一樣的內容,每一次生成一個實例,都必須為重復的內容,多占用一些內存。這樣既不環(huán)保,也缺乏效率。
//----Prototype模式
Javascript規(guī)定,每一個構造函數(shù)都有一個prototype屬性,指向另一個對象。這個對象的所有屬性和方法,都會被構造函數(shù)的實例繼承。
這意味著,我們可以把那些不變的屬性和方法,直接定義在prototype對象上。
<script>
function Cat(name, color) {
this.name = name;
this.color = color;
}
Cat.prototype.type = "貓科動物";
Cat.prototype.eat = function () {
alert("吃老鼠")
};
//生成實例。
var cat1 = new Cat("大毛", "黃色");
var cat2 = new Cat("二毛", "黑色");
alert(cat1.type); // 貓科動物
cat1.eat();// 吃老鼠
alert(cat1.eat == cat2.eat);//trueF
</script>
這時所有實例的type屬性和eat()方法,其實都是一個內存地址,指向prototype對象,因此就提高了運行效率。
以上這篇JS構造函數(shù)與原型prototype的區(qū)別介紹就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
- javascript prototype的深度探索不是原型繼承那么簡單
- JavaScript為對象原型prototype添加屬性的兩種方式
- js中使用使用原型(prototype)定義方法的好處詳解
- javascript prototype原型詳解(比較基礎)
- javascript prototype 原型鏈
- 跟我學習javascript的prototype原型和原型鏈
- javascript prototype原型操作筆記
- js使用原型對象(prototype)需要注意的地方
- 淺談js構造函數(shù)的方法與原型prototype
- [js高手之路]圖解javascript的原型(prototype)對象,原型鏈實例
- Javascript 原型和繼承(Prototypes and Inheritance)
- JS原型prototype和__proto__用法實例分析
相關文章
JavaScript中Async/Await通過同步的方式實現(xiàn)異步的方法介紹
在JavaScript的異步編程中,我們經(jīng)常使用回調函數(shù)、Promise和 Async/Await來解決異步操作的問題,Async/Await 又是Promise的語法糖,它的出現(xiàn)讓異步編程變得更加直觀和易于理解,本文將詳細講解Async/Await如何通過同步的方式實現(xiàn)異步2023-06-06
javascript 實現(xiàn)動態(tài)側邊欄實例詳解
這篇文章主要介紹了javascript 實現(xiàn)動態(tài)側邊欄實例詳解的相關資料,并附實例代碼,幫助大家學習理解,需要的朋友可以參考下2016-11-11
JavaScript實現(xiàn)動態(tài)添加、移除元素或屬性的方法分析
這篇文章主要介紹了JavaScript實現(xiàn)動態(tài)添加、移除元素的方法,結合實例形式分析了javascript針對頁面元素動態(tài)添加、移除、設置等相關函數(shù)與使用技巧,需要的朋友可以參考下2019-01-01
網(wǎng)絡請求axios與fetch的區(qū)別及使用示例
Fetch和Axios是兩個常用的JavaScript庫,用于處理數(shù)據(jù)請求,下面這篇文章主要給大家介紹了關于網(wǎng)絡請求axios與fetch的區(qū)別及使用的相關資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下2024-04-04

