假设我有这个构造函数:
function Person() {
this.name = 'jviotti';
}
如何从构造函数外部访问this.name
的值,例如将其设置为另一个值?
Person.name
// Person
Person.constructor.name
// Function
答案 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