如何使对象继承值?

时间:2016-08-04 00:28:10

标签: javascript object prototype

考虑到这样的事情:

rho = v.mag();

phi = asin(v.z/rho);

theta = atan2(v.y, v.x);

有没有办法使用 data.car.name.year

获取“2006”值

当一个对象本身缺少该属性时,我试图使用父属性。我看了原型设计,但它似乎不是吗?

在其他情况下,如果在所请求的级别上不可用,如何访问在父级别定义的值?

2 个答案:

答案 0 :(得分:1)

如果你想获得该对象的年份(“2006”),你需要像这样访问:

data.year

但建议您将对象更改为:

data = {'car': {'name': 'Mazda','year': 2006}};

并访问:

data.car.year

答案 1 :(得分:0)

您无法执行data.car.name.year的原因是由于JSON规则。如果你打破这个,你可以看得更好。

选项1:

data = {'car': 
    {
        'name': 'Mazda'
    }, 
    'year': 2006
};

现在您可以看到,如果您访问car,则会将其定向到其中包含name的对象。将其视为计算机上的文件夹结构。

/ car / name = {'name':'Mazda'} / car / year = 2006

也许你想要的是这个:

data = {
   'car': 
    {
        'name': 'Mazda',
        'year': 2006
    }
};

这样你就可以data.car.year

选项2:

data.car.name.year = data.year 这将复制对象上的属性,但您可以将其用作data.car.name.year

另一种更复杂的方式:

您可以让对象从javascript中的其他对象继承。我建议去ES6 Classes或TypeScript。

两者都需要编译成javascript才能在大多数浏览器中运行以获得最新功能。

从打字稿深潜:

class Point3D extends Point {
    z: number;
    constructor(x: number, y: number, z: number) {
    super(x, y);
    this.z = z;
}
add(point: Point3D) {
    var point2D = super.add(point);
    return new Point3D(point2D.x, point2D.y, this.z + point.z);
    }
}

这是一个类似的直接JS实现

var Point3D = (function (_super) {
    __extends(Point3D, _super);
    function Point3D(x, y, z) {
    _super.call(this, x, y);
    this.z = z;
}
Point3D.prototype.add = function (point) {
    var point2D = _super.prototype.add.call(this, point);
    return new Point3D(point2D.x, point2D.y, this.z + point.z);
};
    return Point3D;
})(Point);