我有以下Javascript代码;
var Person = function(name, age) {
this.name = name;
this.age = age;
return this;
};
Person.prototype.getAge = function() {
alert("Age : " + this.age);
}
var p1 = new Person("xyz",10);
p1.getAge();
这很有效,我收到了年龄:10的警告
现在,如果我更新代码如下(在实例化Person对象p1后定义了getAge());
var Person = function(name, age) {
this.name = name;
this.age = age;
return this;
};
var p1 = new Person("xyz",10);
Person.prototype.getAge = function() {
alert("Age : " + this.age);
}
p1.getAge();
它仍然将输出返回为“年龄:10”
现在我的问题是这是如何正常工作的,因为在我们实例化Person对象p1之后定义了Person.prototype.getAge? 是因为“原型”的运作方式吗?
答案 0 :(得分:1)
是的,这就是原型的工作方式。您也可以使用此技术扩展字符串,对象和数组。
答案 1 :(得分:1)
任何对象原型都可以随时修改。想想修改基础Object
原型的库/框架......即使是内置对象(Date
,String
等)都会对{{1}进行修改是否在页面加载时立即发生
试试这个:
Object.prototype
答案 2 :(得分:1)
javascript中的对象有一种链,如果你要求他们提供属性,他们会返回他们的属性,如果他们没有它,它会尝试在它的链上面找到它,在你的情况下,当要求p1获取其getAge属性,它在Person.prototype中查找它。
var Person = function(name, age) {
this.name = name;
this.age = age;
return this;
};
var p1 = new Person("xyz", 10);
var p2 = new Person("abc", 12);
Person.prototype.getAge = function() {
alert("Age : " + this.age);
}
p1.getAge = function() {
alert("I am " + this.age + " years old.");
}
p1.getAge(); // I am 10 years old.
p2.getAge(); // Age : 12
在this example中,p1有自己的getAge属性,所以当被问到时,它会返回它。另一方面,p2并不真正具有此属性,但可以通过“该链”访问它并返回其原型的属性。