我是JS的新手,对继承有疑问。如何通过子类访问继承的属性?
假设我有以下课程:
function ParentClass(parentArg) {
this.parentProperty = parentArg;
}
function ChildClass(childArg1, childArg2) {
this.prototype = new ParentClass(childArg1);
this.childProperty = childArg2;
}
在某些时候,会创建一个ChildClass对象,如下所示:
var foo = new ChildClass('value 1', 'value 2');
那么如何从子实例访问父属性?以下内容返回' undefined'。
var parentValue = foo.parentProperty;
非常感谢。 干杯
答案 0 :(得分:3)
如果你想初始化parentProperty
,你必须这样做
function ParentClass(parentArg) {
this.parentProperty = parentArg;
}
function ChildClass(childArg1, childArg2) {
ParentClass.call(this, childArg1);
this.childProperty = childArg2;
}
要实际继承父方法,您可能想要
ChildClass.prototype = Object.create(ParentClass.prototype);
进行这些更改后,
var foo = new ChildClass('value 1', 'value 2');
console.log(foo);
# { parentProperty: 'value 1', childProperty: 'value 2' }
答案 1 :(得分:0)
foo.prototype.parentProperty
如果您希望获得value 1
答案 2 :(得分:0)
问题是因为在声明对象定义之前无法分配原型属性:
不起作用:
function Parent() {
this.parentProperty = "test";
}
function Child() {
// This doesn't work because the prototype is set inside of the definition
this.prototype = new Parent();
}
var child = new Child();
alert(child.parentProperty);
<强>作品强>
function Parent() {
this.parentProperty = "test";
}
function Child() {
// Define prototype outside of function constructor
}
Child.prototype = new Parent();
var child = new Child();
alert(child.parentProperty);
另请注意,在第二个示例中,我们分配给Child.prototype而不是新的Child()。原型
答案 3 :(得分:0)
对于ES6,您可以使用扩展,例如
before_deploy