假设我有这个构造函数:
function Person() {
this.name = 'jviotti';
}
如何this.name
从构造函数外部访问 的值,例如将其设置为另一个值?
Person.name
// Person
Person.constructor.name
// Function
假设我有这个构造函数:
function Person() {
this.name = 'jviotti';
}
如何this.name
从构造函数外部访问 的值,例如将其设置为另一个值?
Person.name
// Person
Person.constructor.name
// Function
您需要创建该对象的实例。
function Person() {
this.name = 'jviotti';
}
var person1 = new Person();
console.log(person1.name); // jviotti
person1.name = 'ctcherry';
console.log(person1.name); // ctcherry
在es6中,如果你正在使用类然后创建一个类和 instance.property 的实例,你会得到一个答案
class Example {
constructor(size) {
this.size = size;
}
}
$ var example = new Example(5);
$ example.size; // 5
取决于你想怎么称呼它。如果您使用的是原型,那么:
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"
您可以通过从对象“继承”它来覆盖属性:
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