使用class聲明對原型的影響

在ES5中,更改Animal類的原型會影響到之后實例化的對象

function Animal () {}
var a1 = new Animal()

Animal.prototype = {sayhi(){}}
var a2 = new Animal()

console.log('1 -- '+ a1.sayhi)  // undefined
console.log('2 -- '+ a2.sayhi)  // function sayhi(){}

因為Animal的prototype屬性writable。

Object.getOwnPropertyDescriptor(Animal, 'prototype')
/*
{
  configurable: false
  enumerable: false
  value: Object { sayhi: sayhi() }
  writable: true
?}
*/

在ES6中,使用class創(chuàng)建的類,修改其原型不會影響后面實例化的對象

class Person {}
var p1 = new Person()
Person.prototype = {sayhi(){}}
var p2 = new Person()
console.log('1 -- '+ p1.sayhi) // undefined
console.log('2 -- '+ p2.sayhi) // undefined

因為Person 的prototype屬性是unwritable。

Object.getOwnPropertyDescriptor(Person, 'prototype')
/*
{
  configurable: false
  enumerable: false
  value: Object { ... }
  writable: false
?}
*/
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容