famo.us:对Surface进行子类化

时间:2014-05-20 13:33:06

标签: javascript famo.us

我已经看到了一些在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个问题:

  1. View.apply(this, arguments);的目的是什么?这是“javascript事”还是“famo.us事”?
  2. 如果我想将宽度和高度属性传递到SettingsView .ctor,那么我可以将它们传递到View .ctor中怎么办?这就是apply方法的作用吗?
  3. SettingsView.DEFAULT_OPTIONS = {};是什么意思?

1 个答案:

答案 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时,该过程经常发生

这可能需要进行一些编辑才能更清晰。