亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

javascript 為什么要使用 prototype

標簽:
JavaScript

答案:节省内存占用

没有 prototype 会有什么问题?

考虑一下我们在 js 中如何创建类的实例对象?先定义一个方法 Person,然后使用 new 关键词调用这个方法,我们先创建一个实例对象 freeman,然后再创建一个实例对象 newton,我们按照  Java 或者 C# 等面向对象语言的思路去考虑,我们会认为同样是人这个类的两个不同实例 freeman 和 newton,是不是应该具有同样的行为(此处是 eat 和 drink),但很不幸,如果使用这样的方法在 js 中创建这两个对象,他们的这两个行为没有半毛钱关系,为什么?因为创建这两个对象时都分别创建了自己的方法,只是名字相同而已(仅此而已)。考虑一个场景,如果我们需要创建一堆这样的实例的时候,我们每个实例都在重复创建这些方法,你会发现内存在持续增长。尤其是对于 virtual DOM 中的 element,如果每个
element 都有自己的一套方法,那对于一个普通的 html 文档来说,背后的 DOM 将占用大量的内存,从而影响到 js 的效率。

function Person(name) {  this.name = name;  this.eat = function () { console.log('eat apple.') };  this.drink = function() { console.log("drink water.")  };
}var freeman = new Person('freeman');var newton  = new Person('Newton')

freeman.eat   === newton.eat     // falsefreeman.drink === newton.drink   // false

为什么引入 prototype?

为了解决第一节中提到的问题,javascript 引入了 prototype 的概念,每个方法都默认由 javascript 执行环境添加一个 prototype 属性,这个属性本身是一个 object 对象,所以我们可以在这个 prototype 属性上添加她的属性和方法,只要使用 new 关键词创建的实例默认都集成这个 prototype 上定义的属性和方法(类似 OO 语言中的实例方法),这样无论你创建多少个实例对象,他们的行为(方法)都只有一个 blueprint,不会重复创建。

function Person(name) {  this.name = name;
}
Person.prototype.eat = function() {}
Person.prototype.eat = function() {}var freeman = new Person('freeman');var newton  = new Person('Newton')

freeman.eat   === newton.eat     // truefreeman.drink === newton.drink   // true



作者:我是柯南
链接:https://www.jianshu.com/p/e3b6ef04eda4


點擊查看更多內容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消