【问题标题】:child method defined on parent method in constructor's prototype returns `undefined` for object's property accessed via this. Why构造函数原型中父方法上定义的子方法为通过 this 访问的对象属性返回“未定义”。为什么
【发布时间】:2017-06-03 14:21:39
【问题描述】:

在下面的代码中,构造函数原型上定义的getName() 方法定义了一个子方法getAge()(因为它是function object,我认为是这样)但是typeof emp1.getName == "object" 返回falseemp1.getName.hasOwnProperty('getAge')返回true

var fname = "Ram";
var lname = "Singh";
var age = "48";

function employee(fname, lname, age) {
  this.fname = fname;
  this.lname = lname;
  this.age = age;
}
employee.prototype.getName = function () { return "Name is: " + this.fname + " " + this.lname; },
employee.prototype.getName.getAge = "function () { return + this.age; }"

var emp1 = new employee(fname, lname, age);
typeof emp1.getName == "object";        //returns false
emp1.getName.hasOwnProperty('getAge');   //returns true

如果getName 不是一个对象,那么它怎么会有一个子属性getAge 作为它自己的属性。

此外,emp1.getName.getAge() 返回 Age is: undefinedemp1.age 被初始化为 48,因为 emp1.age 返回 48 那么为什么 getAge() 无法获得 emp1.age 值。

【问题讨论】:

  • getAge 中的this 不是employee 的实例。你试过记录它吗?

标签: javascript prototype javascript-objects


【解决方案1】:

getName 是一个函数(试试typeof emp1.getName == 'function'),它是一种特殊类型的对象(几乎所有东西都是javascript 上的对象)。因此,它也可以有自己的属性。

【讨论】:

  • 是的,但它本质上是一个对象,正如你所说的,几乎所有东西都是 javascript 上的对象。此外,该对象添加了一个属性getAge(),这使得它更明显,因为functions per 说没有属性,但对象有
猜你喜欢
  • 2022-10-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-30
  • 2021-11-10
  • 2016-10-10
相关资源
最近更新 更多