考虑到这样的事情:
rho = v.mag();
phi = asin(v.z/rho);
theta = atan2(v.y, v.x);
有没有办法使用 data.car.name.year
获取“2006”值当一个对象本身缺少该属性时,我试图使用父属性。我看了原型设计,但它似乎不是吗?
在其他情况下,如果在所请求的级别上不可用,如何访问在父级别定义的值?
答案 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);