- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我们使用 John Resig 的 inherit.js。这让我们可以访问方便的 _super()
函数来调用父函数。太棒了,但今天我被一个问题难住了,我无法从 setTimeout
中调用 this._super()
,即使我绑定(bind)了这个:
var Person = Class.extend({
init: function(isDancing){
this.dancing = isDancing;
},
dance: function(){
return this.dancing;
}
});
var Ninja = Person.extend({
init: function(){
this._super( false );
},
dance: function(){
window.setTimeout(function(){
// Call the inherited version of dance()
return this._super();
}.bind(this),50);
});
this._super()
未定义!这是怎么回事?
最佳答案
要完成这项工作,您需要在子类方法中捕获 _super 方法,如下所示:
dance: function(){
// capture the super method for later usage
var superMethod = this._super;
window.setTimeout(function(){
return superMethod();
},50);
};
这行得通而您的代码行不通的原因是 inherit.js 中的 extend()
方法捕获了父类(super class)'方法作为 this._super
就在你覆盖的方法运行之前。然后它运行你的代码,在你的代码完成之后运行它会将 _super 恢复到它运行之前设置的任何值。该操作发生在以下来自 inherit.js 的代码中
var tmp = this._super;
// Add a new ._super() method that is the same method
// but on the super-class
this._super = _super[name];
// The method only need to be bound temporarily, so we
// remove it when we're done executing
var ret = fn.apply(this, arguments);
this._super = tmp;
return ret;
所以更具体地说;当运行原始代码时,用作 setTimeout 参数的函数绑定(bind)到原始对象。它不起作用的原因是,即使 this
引用了正确的对象,this._super
引用了其他东西,因为 this._super
是重置为指向它在运行该方法之前指向的任何内容。可能它没有被设置,所以 this._super
的值很可能只是 undefined
。
关于javascript - 从 setTimeout() 内部调用 this._super(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19027835/
App.CurtainView = Ember.View.extend name: "CurtainView" getName: -> console.log @get("name")
我想知道为什么像 EmberJS 这样的框架使用 _super 方法来调用扩展对象上的重写方法,而不是(在我看来)更合乎逻辑的 this.super。 是否有特定原因,例如 super 是 javas
我想知道是否有办法获取计算属性的 _super? 例如: controllers/core-controller.js export default Controller.extend({ m
当从回调中调用 Ember 的对象方法时,我正在尝试弄清楚如何使用 this._super。 我知道我可以在调用回调之前分配 var _super = this._super 但我不喜欢它。 我想让
我在我的应用程序中使用了 infragistics igGrid 但出现了 javascript 错误 Object doesn't support property or method "_supe
我们使用 John Resig 的 inherit.js。这让我们可以访问方便的 _super() 函数来调用父函数。太棒了,但今天我被一个问题难住了,我无法从 setTimeout 中调用 this
我一直在浏览 Ember 文档,发现在覆盖 init 时调用 _super 方法的位置不一致。 这是最常见的,也是我到目前为止一直在使用的 var Foo = Em.Object.extend({
我想从我的请求“instance.web.Model”中获取结果,然后调用 this.super()。问题是“instance.web.Model”是异步的,所以在我的例子中, super() 将在请
所以我的应用程序有这个 component.js: import Component from '@ember/component'; import layout from './template';
调用基类方法似乎对我不起作用。我有以下设置: ... ... 和 JavaScript $.widget('tt.name1',{ _create: function() {
我真的很喜欢John Resig's simple inheritance method 。它有很好的语法,而且 this._super 非常强大。 2014 年很艰难,我希望能够定义 getter
我刚刚开始使用 ember js 并且多次被这个功能绊倒 有人可以简要介绍一下 this._super() 的使用,并解释 ...arguments 的重要性 谢谢 最佳答案 每当您覆盖类/函数(例如
我在 EmberJS 代码和讨论{未提供引用}中看到以下内容: 代码 路由.js setupController: function (controller, model) { this._s
我试图在 Controller 操作中的 Promise 处理程序中使用 _super ,但它不起作用,因为它似乎丢失了正确的函数链。 ApplicationRoute = Ember.Route.e
为什么? 我刚刚从 master 分支构建了 emberjs(现在)。我没有找到任何关于为什么他们禁用了对 _super 的支持的信息... 有人可以让我更聪明吗? :) 最佳答案 在这里问了一个类似
我完全是 VueJS 的新手,但在 Angular 等方面有一些经验。主要是发展。与其说是设置环境(webpack、gulp 等)。 我已经尝试使用 TypeScript 设置 VueJS,并且几乎处
我对所有扩展抽象类的子类使用依赖注入(inject)。 问题是在抽象构造函数类中我启动了一个我计划在其子类中覆盖的方法,如果有必要的话。 我遇到了一个问题,即我注入(inject)的依赖项在从 sup
我是一名优秀的程序员,十分优秀!