在javascript中访问父属性

时间:2014-03-14 15:07:10

标签: javascript inheritance

我是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;

非常感谢。 干杯

4 个答案:

答案 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