Thu*_*yen 6 javascript prototype private
我尝试覆盖一个方法和脚本是:
function wrapper(target) {
target.doABC = function () {
alert('in wrapper');
};
return target;
}
function Model() {
wrapper(this);
}
Model.prototype.doABC = function () {
alert('in Model');
};
var a = new Model();
a.doABC();
Run Code Online (Sandbox Code Playgroud)
结果是'在包装中'.我不知道为什么?
任何JavaScript对象都有自己的和继承的属性.自己是直接在实例上定义的并且继承自prototype对象.
使用属性访问器时,JavaScript首先在对象自己的属性列表中搜索.如果找不到该属性,则会在对象的原型链中进行搜索.
在您的示例中,该wrapper()方法在对象实例上定义了一个自己的属性doABC,该属性是一个警报的函数'in wrapper'.即使对象具有与doAbc警报相同的属性的原型'in Model',JavaScript仍然会使用自己的属性.
function wrapper(target) {
// Define an own property "doABC"
target.doABC = function () {
alert('in wrapper');
};
return target;
}
function Model() {
wrapper(this);
}
// Define an inherited property "doABC"
Model.prototype.doABC = function () {
alert('in Model');
};
var a = new Model();
//Use the own property "doABC". The inherited "doABC" is ignored.
a.doABC();
Run Code Online (Sandbox Code Playgroud)
另外,可以使用delete运算符删除自己的属性.删除后,该对象将使用继承的属性.
// delete the own property "doABC"
delete a['doABC'];
// the inherited "doABC" will be used. Alerts "in Model"
a.doABC();
Run Code Online (Sandbox Code Playgroud)
检查完整的工作演示.
| 归档时间: |
|
| 查看次数: |
94 次 |
| 最近记录: |