如何使用OLOO模式在javascript中实现继承

Gee*_*eky 1 javascript inheritance

我正在尝试实现此代码段的继承

function parent(name) {
  this.name = name;

}

function child(childname) {
  parent.call(this, "cde");
  this.childname = childname;
}

var p1 = new parent("abc");
child.prototype = Object.create(parent.prototype);
var p2 = new child("def");

console.log(p1.name);

console.log(p2.name);
Run Code Online (Sandbox Code Playgroud)

使用OLOO模式OLOO模式

这是我的尝试

function person(name) {
  this.name = name;
}


var p1 = new person("abc");

var p2;

p2 = Object.create(person);

console.log(p2.name);
p2.childname = "def";
Run Code Online (Sandbox Code Playgroud)

虽然在这里创建p2对象我不发送名称.如何在创建p2对象时向其发送名称.

有人请说明这是使用OLOO模式实现继承的正确方法

谢谢

Kyl*_*son 5

这里发布的当前答案都是"正确的",因为它们适当地应用仅对象原型链接(没有构造函数).不过我会澄清两点:

  1. 我永远不会推荐属性(或方法)的"阴影",这意味着让对象p1p2对象都具有.name属性.这是JS原型中最常见的混淆源之一,即IME.我总是建议在原型链中的每个对象上使用不同的属性名称.

  2. OLOO不仅仅是在不使用构造函数的情况下连接传统的"继承"层次结构,就像OP似乎正在做的那样.这是有效的,但是OLOO的简化视图非常简化.实际上,OLOO旨在以不同于"类"的方式构建模拟软件的能力.OLOO的目的是让你设置两个对等对象,其中一个可以委托给另一个对象(反之亦然,如果你愿意的话),这样他们就可以在方法的调用时间内进行虚拟编写; 又名:行为代表团.有关详细信息,请参阅我的"YDKJS:this&Object Prototypes"一书的第6章.