美文网首页
使用class声明对原型的影响

使用class声明对原型的影响

作者: wdp1005 | 来源:发表于2019-08-09 14:43 被阅读0次

在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创建的类,修改其原型不会影响后面实例化的对象

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
​}
*/

相关文章

网友评论

      本文标题:使用class声明对原型的影响

      本文链接:https://www.haomeiwen.com/subject/nychjctx.html