當前位置:
首頁 >
深入浅出面向对象和原型【番外篇——重新认识new】
發布時間:2025/3/18
43
豆豆
生活随笔
收集整理的這篇文章主要介紹了
深入浅出面向对象和原型【番外篇——重新认识new】
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
前言
我們在深入淺出面向對象和原型【概念篇2】在這篇文章中了解到了如何使用new Function解決重復創建浪費內存的問題,其中的關鍵就是new,那么這篇文章讓我們來重新了解new的前世今生
一個苦逼年級主任的故事
開學啦~~~高一年級主任龔主任需要為全年級每一位理科班新生錄入學號并為每一位學生生成相關檔案
不僅要自己留一份而且要把每一個檔案都上傳到學校資料庫
哇,全年級一千個學生,一個個輸入,不要命啦?
還好龔主任學過編程
龔主任突然想到,他昨天晚上在才在segmentfault上看到有關于內存浪費的文章——深入淺出面向對象和原型【概念篇2】
那么他寫的這個代碼就是典型的內存浪費啊
每個學生除了學號不同,其它都相同,咋辦呢?
哎對了,那篇文章說可以通過原型和原型鏈解決這個問題
那么試試吧
好了,大功告成,這下內存不浪費了
但是,龔主任聽說程序猿寫代碼都追求可讀性強,他這寫的太不優雅了
再改改吧
constructor屬性
function test(id) {this.id = id}new test(1)console.log(test.prototype) // {constructor: ?}使用new操作符的時候,為了記錄臨時對象是由哪個函數創建的,會在prototype里添加一個constructor屬性,指向創建臨時對象的函數
注意:如果直接給prototype賦值,則constructor屬性會消失
可以采用另一種賦值方式
function 學生(學號) {this.學號 = 學號}學生.prototype.年級 = '高一'學生.prototype.所選方向 = '理科班'學生.prototype.上傳資料 = function () {/*上傳資料的代碼*/}var 學生們 = []for (var i = 0; i < 1000; i++) {學生們.push(new 學生(i))}// 出現constructor屬性console.log(學生.prototype) // {年級: "高一", 所選方向: "理科班", 上傳資料: ?, constructor: ?}總結
new的本質
new的本質其實就是一個語法糖,目的就是為了幫我們省代碼
new的作用
關于new的語法糖
var a = {} 是 var a = new Object()的語法糖 var a = [] 是 var a = new Array()的語法糖 var a = funciton(){} 是 var a = new Function()的語法糖參考
new運算符
JS 的 new 到底是干什么的?
總結
以上是生活随笔為你收集整理的深入浅出面向对象和原型【番外篇——重新认识new】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Be Close To The Real
- 下一篇: 移动端布局方案探究