Prototype

在Constructor的章节中我们使用建立实体的方式

function Person(name, age){
    this.name = name
    this.age = age
}
let c = new Person("Dennis", 22)
console.log(c) //Person { name: 'Dennis', age: 22 }

但今天我想建立一个function可以自我介绍Constructor的方法是

function Person(name, age){
    this.name = name
    this.age = age
    this.SayHi = function() { 
        console.log(`$Hello I'm ${this.name} my age is ${this.age} `)
    }
}
let c = new Person("Dennis", 22)
c.SayHi() //$Hello I'm Dennis my age is 22 

还有一个就是今天的重点Prototype

当我们使用new建立一个物件的时候SayHi这个function会一直重复并且占用记忆体,但明明都一样何必多创造
所以我们把他抽取出来透过prototype指向SayHi这个function

function Person(name, age){
    this.name = name
    this.age = age
}

Person.prototype.SayHi = function(){
    console.log(`Hello I'm ${this.name} my age is ${this.age}`)
}

let c = new Person("Dennis", 22) 
c.SayHi() //Hello I'm Dennis my age is 22

https://ithelp.ithome.com.tw/upload/images/20210521/201304198kaNXpawL7.png
在这里就透过prototype去指向SayHi function了

JavaScript prototype无所不在

let num = 23
let Num = new Number(23)

console.log(typeof(num)) //number
console.log(typeof(Num)) //object

https://ithelp.ithome.com.tw/upload/images/20210521/20130419axyw67DSeC.png

上面的图完整示范了在JavaScript不论你定义number、string等等,都会透过Prototype去继承相关的method


<<:  C# 侦错

>>:  前端工程学习日记26天 FLEX 并排图文

Day 18 - 未知与空值 undefined、null、NaN

前言 今天来讨论另一个容易被忽略的主题,如果要表达「有值」的情况,大家都很熟悉: const sco...

[Day21] Flutter - Presentation AutoRouter(part5)

前言 Hi, 我是鱼板伯爵今天要在我们的专案里面加入场景的路由,这样可以方便管理我们每个场景,教学内...

【课程推荐】2021/3/20~3/21 软件测试个案设计与分析实战班

课程目标 了解各种测试个案设计方法,并提供实作演练以更深入了解其观念与技术,并藉由讨论各种案例,来增...

[Day 25] Reactive Programming - Spring WebFlux(R2DBC)

前言 在上一个范例中,是写死回传的内容,显然在现实生活中应该是不会有公司让你可以这样做的,而当我们的...

[Day3] - 前端,後端是在做什麽? --续 前端後端的历史及架构

其实每个时期程序流行的架构以及写法会略有不同,每个时期前端後端负责的范畴也不尽相同,我们无法知道我们...