功能继承
Functional inheritance
function Machine() {
this._enabled = false;
var self = this;
this.enable = function() {
self._enabled = true;
};
this.disable = function() {
this._enabled = false;
};
}
function CoffeeMachine() {
Machine.apply(this, arguments);
var parentEnable = this.enable;
this.enable = function() {
parentEnable();
/// this.run();
}
}
var coffeeMachine = new CoffeeMachine();
coffeeMachine.enable();
在parentEnable
从this.enable
复制的功能。在Machine
var self = this;
- self
这里指的是创建的对象构造函数CoffeeMachine
。当被称为parentEnable()
,如何挑战?毕竟,局部变量自函数Machine
。一个parentEnable()
在CoffeeMachine()
中叫了一声.
与原型链伙伴有关
self 这里指的是创建的对象构造函数
不,这里的 self 是指构造函数的创建实例,而不是构造函数本身。否则,它是全局窗口对象。
机器应用(这个);
此语句使 coffeeMachine 继承了 Machine 构造函数中的所有方法和属性。因此,它在这两者之间创建了父子关系,其中机器是父类,咖啡机是子类。
它在它们之间创建了一个原型链。如果你正在子实例上寻找一个属性或方法,但它没有在子构造函数中定义,解释器会在原型链下面寻找它。如果它在父构造函数中找到,则使用该属性/方法的值
在咖啡机内,这是指全局对象。当您创建咖啡机的新实例时,这是指新创建的对象。当您创建咖啡机的新实例时,var parentEnable = this.enable;
在原型链中查找this.enabled
。
由于 this.enabled 方法前面有 var parentEnable=this.enabled 它在 coffeMachine 构造函数中找不到它。所以它深入prototype chain
,并在父母中找到它。这就是父母this.enabled
分配给var parentEnable
的方式。
如果在 var parentEnabled
之前定义了 coffeeMachine 的 this.enabled 函数,则 coffeMachine 的 this.enabled 函数将被分配给parnetEnabled
function CoffeeMachine() {
Machine.apply(this);
this.enable = function() {
parentEnable();
/// this.run();
}
var parentEnable = this.enable; // it is now function(){parentEnable();///this.run()};
}
var coffeeMachine = new CoffeeMachine();
coffeeMachine.enable();
这两个链接对javascript中的原型链有很好的解释:
- 了解 JavaScript:继承和原型链
- 继承和原型链 -MDN
函数在调用时都会引入一个新的作用域,在这种情况下,当机器在你的行Machine.apply(this, arguments)
被调用时,你引入了一个新的作用域。
内定义的每个函数都可以访问其自身作用域内的每个变量,以及外部作用域(在 Machine 中定义的变量)
所以从技术上讲,CoffeeMachine无法访问self
,Machine的启用和禁用功能可以访问这些功能,而CoffeeMachine可以访问这些功能。
- 添加文字和评论功能更新Div
- JavaScript打印功能使日历停止工作
- 每当您在选择器内移动鼠标时,悬停功能就会重复
- 如何防止网页加载后自动启动功能
- 除修剪外的其他功能
- 悬停功能触发器
- 使用angularjs向浏览器发送servlet响应(下载功能)
- 删除CKEditor工具栏按钮,但不删除功能
- 异步facebook功能
- 如何将chrome扩展功能移植到移动设备(特别是jquery和trello)
- 从控制器继承了隔离的作用域以生成可重用的指令
- Javascript-经理是一个人,但不是经理本身?功能/原型继承
- KnockoutJS 通过 ko.utils.extend 继承功能
- 功能继承
- 农业网格继承功能
- 在基于Crockford's的功能继承
- 组合优于继承,这是向视图添加额外功能而不诉诸继承的更好方式
- Javascript继承具有父级父级的功能
- Javascript继承:用模块模式和$.extend覆盖功能
- 是否有一种方法可以访问从基本模块继承的dojo功能