0

假设我有这个构造函数:

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

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

Person.name
// Person

Person.constructor.name
// Function
4

4 回答 4

2

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

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

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

person1.name = 'ctcherry';
console.log(person1.name); // ctcherry
于 2013-07-02T02:12:40.897 回答
1

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

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

$ var example = new Example(5);
$ example.size; // 5
于 2018-03-29T11:43:43.560 回答
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"
于 2013-07-02T02:30:40.160 回答
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 来更改它的默认值。原型属性和方法由所有实例共享,可用于对象的默认值和方法。

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

于 2013-07-02T02:26:56.840 回答