访问构造函数外部的构造函数属性

时间:2013-07-02 02:09:45

标签: javascript

假设我有这个构造函数:

function Person() {
  this.name = 'jviotti';
}

如何从构造函数外部访问this.name的值,例如将其设置为另一个值?

Person.name
// Person

Person.constructor.name
// Function

4 个答案:

答案 0 :(得分:2)

您需要创建该对象的实例。

function Person() {
  this.name = 'jviotti';
}

var person1 = new Person();
console.log(person1.name); // jviotti

person1.name = 'ctcherry';
console.log(person1.name); // ctcherry

答案 1 :(得分:0)

您可以通过继承对象“子类化”来覆盖属性:

var inherits = function(childCtor, parentCtor) {
  function tempCtor() {};
  tempCtor.prototype = parentCtor.prototype;
  childCtor.superClass_ = parentCtor.prototype;
  childCtor.prototype = new tempCtor();
  childCtor.prototype.constructor = childCtor;
};
function Person() {
  this.name = 'jviotti';
}
Person.prototype.getName=function(){
  return this.name;
}
function myPerson(){
  Person.call(this);
  // overriding default value for name
  this.name="my person's name";
}
inherits(myPerson,Person);
// override getName and calling it's parent
myPerson.prototype.getName=function(){
  return "From myPerson:" + myPerson.superClass_
    .getName.call(this);
}
var p = new myPerson();
console.log(p.getName());//From myPerson:my person's name

不确定这是否是您想要做的。在您的示例中,属性name是实例属性。所以你可以通过“子类化”Person来改变它的默认值。原型属性和方法由所有实例共享,可用于对象的默认值和方法。

该代码显示了如何通过定义行为类似于Person的myPerson来更改这些属性,但是覆盖设置name的默认值并添加实现getName

答案 2 :(得分:0)

取决于您想如何调用它。如果你正在使用原型,那么:

function Person(){
  this.name="John"
}

function Person(){} //re-defining the constructor
Person.prototype.name = "Jane"; //changing the constructor
var person = new Person();
console.log("person.name") //"Jane"

答案 3 :(得分:0)

es6 中,如果您正在使用类然后创建一个类和instance.property的实例,您将得到一个答案

class Example {
  constructor(size) {
    this.size = size;
  }
}

$ var example = new Example(5);
$ example.size; // 5