js Object.setPrototypeOf & Object.create All In One


js Object.setPrototypeOf & Object.create All In One

Object.setPrototypeOf ??

function Animal (name, sound) {
  this.name = name;
  this.sound = sound;
}
Animal.prototype.shout = function () {
  console.log('name =', this.name, 'sound =', this.sound);
}

function Plants (name) {
  this.name = name;
  this.sound = null;
}
// 重载:方法名称相同,参数不同(参数个数不同或参数类型不同)
// 复写/覆盖/重写:方法名称相同,参数相同(内部实现逻辑不同,外部完全没变化)
Plants.prototype.shout = function (arg = '?') {
  console.log('name =', this.name, 'sound =', this.sound);
  console.log('plants shout  =', arg);
}
Plants.prototype.getAlias = function () {
  console.log('alias =', this.name + ' tree ??');
}

// demo
const dog = new Animal('puppy','barking')
// 狗叫 barking

Object.setPrototypeOf(Animal.prototype, Plants.prototype);
console.log('Animal.prototype =', Animal.prototype);

const cat = new Animal('kitten', 'miaow')
// 猫叫 miaow

dog.shout('??');

cat.shout('??');
cat.getAlias();

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/setPrototypeOf

Object.create ??

function Animal (name, sound) {
  this.name = name;
  this.sound = sound;
}
Animal.prototype.shout = function () {
  console.log('name =', this.name, 'sound =', this.sound);
}

function Plants (name) {
  this.name = name;
  this.sound = null;
}
// 重载:方法名称相同,参数不同(参数个数不同或参数类型不同)
// 复写/覆盖/重写:方法名称相同,参数相同(内部实现逻辑不同,外部完全没变化)
Plants.prototype.shout = function (arg = '?') {
  console.log('name =', this.name, 'sound =', this.sound);
  console.log('plants shout  =', arg);
}
Plants.prototype.getAlias = function () {
  console.log('alias =', this.name + ' tree ??');
}

// demo
const dog = new Animal('puppy','barking')
// 狗叫 barking

Animal.prototype = Object.create(Plants.prototype)
console.log('Animal.prototype =', Animal.prototype);

const cat = new Animal('kitten', 'miaow')
// 猫叫 miaow

dog.shout('??');

cat.shout('??');
cat.getAlias();

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/create

refs

https://www.cnblogs.com/xgqfrms/p/15998513.html#5027756

https://www.youtube.com/watch?v=PFmuCDHHpwk

https://juejin.cn/post/6844903527941144589


Flag Counter

?xgqfrms 2012-2020

www.cnblogs.com/xgqfrms 发布文章使用:只允许注册用户才可以访问!

原创文章,版权所有??xgqfrms, 禁止转载 ???,侵权必究??!