0

好的,假设你有两个对象:gregstacy. 他们都是人。Greg 的对象如下所示:

var greg = {
  name: "Greg",
  job: "doctor",
  age: 45
}

和斯泰西是这样的:

var stacy = {
  name: "Stacy",
  age: 42
}

当有人试图访问 Stacy 的job财产时,我怎样才能在不直接将其作为她的情况下返回“失业” job?我想要一个不使用原型的解决方案,而且我真的不想使用函数来访问对象的所有属性。

只是为了上下文:我将它用于 Ajax 自动加载系统,类似于 Rails 的服务器端系统。

4

4 回答 4

3

我会使用这样的代码......使用具有默认值的构造函数:

function Person(cfg) {
  this.name = cfg.name || "John Q. Public";
  this.job = cfg.job || "Unemployed";
  // EDIT: This will allow for an age of '0' -- a newborn.
  this.age = typeof cfg.age === undefined ? null : cfg.age;
}

var greg = new Person({
  name: "Greg",
  job: "doctor",
  age: 45
});

var stacy = new Person({
  name: "Stacy",
  age: 42
});

console.log(stacy.job);
于 2014-08-07T20:32:54.390 回答
2

用于||在提取属性时指定默认值。

var job = person.job || "Unemployed";

但是,这必须在您获得工作的每个地方完成。如果您不想到处重复,则需要使用函数或原型。

于 2014-08-07T20:30:14.230 回答
1

您可以使用 typeof 的显式检查:

if (typeof obj.job === "undefined") { ..

或更简单地说:

console.log(obj.job || "Unemployed")
于 2014-08-07T20:31:22.810 回答
0

错误的架构!

function Person(name, job, age) {
    this.name = name ? name : "no name";
    this.job = job ? job : "no job";
    this.age = age ? age : -1:
}
var greg = new Person("Greg", "doctor", 45);
var stacy = new Person("Stacy", null, 42);

console.log(stacy.job);

还是你打算为每个人写一个自己的静态类???

于 2014-08-07T20:36:56.493 回答