为什么 JavaScript 继承是这样工作的
why javascript Inheritance work like this?
当我们使用 javascript 继承,并且子类从其父级继承时,我们总是这样做:
var klass = function(){ this.init.apply(this, arguments)};
if(parent) {
var subclass = function(){};
subclass.prototype = parent.prototype;
klass.prototype = new subclass;
}
上面的代码来自《Javascript Web Application》,我很困惑它与下面的区别是什么:
var klass = function(){ this.init.apply(this, arguments)};
if(parent) {
klass.prototype = parent.prototype;
}
谁能为我解释?
var klass = function(){ this.init.apply(this, arguments)};
if(parent) {
klass.prototype = parent.prototype;
}
在此代码中,klass.prototype 设置为与 parent.prototype 相同的对象(parent 和 klass 共享相同的原型)。因此,如果您这样做:
klass.prototype.myFunc = function() {}
var p = new parent();
p.myFunc // myFunc will be available on all instances of parent (which is bad!)
更糟糕的是,如果你有
parent.prototype.myFunc = function() { console.log('I parent'); };
你试着覆盖 klass 的 myFunc 函数:
klass.prototype.myFunc = function() { console.log('I child'); };
var p = new parent()
parent.myFunc() // I child
您可以看到为什么共享原型是一个坏主意。
相关文章:
- 用户名输入如果其他块不能正常工作/Javascript-jQuery-AJAX
- 变量只能在函数中局部工作,不能全局工作-Javascript
- onClick按钮不工作javascript/php/jquery mobile
- 点击骰子赢得't工作(javascript)
- for循环,if else不工作Javascript
- 获取下一个不工作Javascript DOM的同级父节点的子节点
- 可以'没有一个函数可以工作——Javascript
- OnFocus 不是工作 JavaScript HTML;不显示对焦时计算和按钮单击时
- 从 iframe 访问主站点中的工作 JavaScript
- 对于在循环中无法按预期工作 JavaScript
- 在阅读表单输入后写回HTML;t工作(Javascript)
- 复选框单击有效,取消选中复选框不工作Javascript
- 代码在Codepen中工作,而不是在浏览器中工作:JavaScript在鼠标滚轮上缩放SVG
- 当用户在这个工作javascript注释框中提交注释时,您将如何添加用户图像和名称
- 向Wordpress添加工作Javascript谷歌地图代码
- 确认/重定向功能不工作-javascript
- 当/patt/版本工作时,为什么RegExp版本不工作?(Javascript)
- Firefox加载项按钮代码不工作-Javascript
- 计算器功能不工作- Javascript
- 将工作JavaScript对象序列化为仅保留属性的JSON