我已经看到了一些在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 = {};
是什么意思?答案 0 :(得分:1)
您使用apply to ... apply ...对象的参数数组。有关** MDN
的更好说明简短形式是apply期望(1)this
的值,其次是参数数组。你会注意到你的例子中没有数组。那是因为如果你使用arguments
,你可以将封闭函数的所有参数传递给正在调用apply的对象。在这种情况下,传递到SettingsView()
的参数随后将应用于封闭的View
在SettingsView
函数之外,您会看到SettingsView
的原型用于创建新的View
,然后我们设置SettingsView
的构造函数基本上打电话给SettingsView()
了解循环如何完成。因此,当调用SettingsView
例如var mySettings = new SettingsView();
的构造函数时,我传递给构造函数的所有参数都将传递给View的构造函数。此外,创建Surface
并将内容选项预先填充到“设置”。在现实世界中,这可能是一个按钮,图像或您可能想要重复使用的东西。
你会发现,如果你查看View
的来源,如果我们在创建View
的新实例时没有明确说明它们,那么会有一个使用了各种属性的DEFAULT_OPTIONS对象。 。在您的示例中,我们基本上只是清除该对象的内容。请参阅文档中传递给典型famo.us视图的内容,以便您创建的视图具有所有必需的属性/选项。
至于将大小属性传递到View中,它不会像那样工作。将famo.us视图视为其他famo.us可渲染的分组(Surfaces)然而,您可以将变量传递给SettingsView构造函数,然后使用该变量设置其包含的Surface的宽度和高度值。这就是你如何去做的。
我绝对推荐这本书,我发现 Speaking Javascript 目前非常有用,因为它处理的是通常的“什么是计算机程序?”即兴演奏。原型和类似对于构建JS应用程序非常重要,当您使用famo.us时,该过程经常发生
这可能需要进行一些编辑才能更清晰。