我在 famo.us 中看到了一些对“Surface”或“View”类进行子类化的示例。这是一个简单的例子:
define(function(require, exports, module) {
var Surface = require('famous/core/Surface');
var View = require('famous/core/View');
function SettingsView() {
View.apply(this, arguments);
this.add(new Surface({ content: 'settings' }));
}
SettingsView.prototype = Object.create(View.prototype);
SettingsView.prototype.constructor = SettingsView;
SettingsView.DEFAULT_OPTIONS = {};
module.exports = SettingsView;
});
我对此有 3 个问题:
View.apply(this,arguments);
的用途是什么?这是“javascript 的事情”还是“famo.us 的事情”?- 如果我想将宽度和高度属性传递到
SettingsView
.ctor 中,以便我可以将它们传递到View
.ctor 中,该怎么办?这就是apply
方法的作用吗? SettingsView.DEFAULT_OPTIONS = {};
的含义是什么?
最佳答案
您可以使用 apply to... apply... 将参数数组应用于对象。更好的描述可以在 ** MDN 上找到。
简写形式是 apply 需要 (1) this 的值,其次是参数数组。您会注意到在您的示例中没有数组。这是因为,如果您使用arguments
,您可以将封闭函数的所有参数传递到正在调用的 apply 对象中。在这种情况下,传递给 SettingsView()
的参数随后将应用于封闭的 View
在SettingsView
函数之外,您会看到SettingsView
的原型(prototype)被用来创建一个新的View
,然后我们将 SettingsView
的构造函数设置为基本上调用 SettingsView()
查看循环如何完成。因此,当调用 SettingsView
的构造函数时,例如 var mySettings = new SettingsView();
我传递给构造函数的所有参数都将传递给 View 的构造函数。此外,还创建了一个Surface
,其中的内容选项预先填充到“设置”中。在现实世界中,这可能是一个按钮、图像或您可能想要重复使用的东西。
如果查看 View
的源代码,您会发现有一个 DEFAULT_OPTIONS 对象,其中包含各种属性,如果我们在创建 的新实例时没有明确声明这些属性,则会使用这些属性>查看
。在您的示例中,我们基本上只是清除该对象的内容。请参阅文档中您需要传递给典型 famo.us View 的内容,以便您创建的 View 具有所有必要的属性/选项。
至于将大小属性传递到 View 中,它不是这样工作的。将 famo.us View 视为其他 famo.us 可渲染对象(Surfaces)的分组。但是,您可以将变量传递给 SettingsView 构造函数,然后使用该变量来设置它包含的 Surface 的宽度和高度值。这就是你要采取的方式。
我绝对建议你买一本关于这方面的书,我发现 Speaking Javascript 目前非常有用,因为它可以处理通常的“什么是计算机程序?”即兴演奏。原型(prototype)等对于构建 JS 应用程序确实至关重要,并且当您使用 famo.us 时,这个过程经常发生
这可能需要一些编辑才能更清晰。
关于javascript - famo.us:Surface 子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23761297/