我对Javascript原型机制有点困惑。我有以下代码:
# .htaccess
# Leverage Browser Caching
FileETag MTime Size
<ifmodule mod_expires.c>
ExpiresActive on
# if you want to change cache values per content-type
#ExpiresByType image/jpg "access 7 day"
#ExpiresByType text/css "access 7 day"
ExpiresDefault "access plus 7 days"
</ifmodule>
执行代码后,对象有两个名称。名字&#34; Klaus&#34;在对象本身和名称&#34;没有名称&#34;在它的原型中。我知道该物业是阴影,它工作正常,但这并不自然?!有没有更好的方法只使用原型的属性?
答案 0 :(得分:0)
您可以直接处理原型属性,但这需要不成比例的努力,可能不被视为最佳实践。相反,您可以在右Person
上下文中调用this
构造函数。
首先,强烈建议在分配函数的new
属性时使用Object.create
而不是prototype
运算符。使用new
运算符,将调用Person
构造函数,但处于错误的this
上下文中。为了防止这种情况,您可以像这样链接它们:
Student.prototype = Object.create(Person.prototype);
相反,如果你想在学生内部调用原型链接(Person
)的构造函数,你可以call
在构造函数中使用正确的this
上下文:
function Student () {
Person.call(this);
this.id = "123";
}
此外,除非您想为每个实例创建单个函数,否则我会将setName
函数移动到[[Prototype]]
的{{1}}:
Person
或者,正如@Teemu所提到的,您还可以将function Person () {
this.name = "no name";
}
Person.prototype.setName = function (n) {
this.name = n;
}
function Student () {
Person.call(this); // Call the Person constructor
this.id = "123";
}
Student.prototype = Object.create(Person.prototype);
s = new Student();
// s.name is 'no name'
s.setName("Klaus");
// s.name is 'Klaus'
属性放在name
上,以将其用作默认值:
Person.prototype