javascript - famo.us:Surface 子类

标签 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 = {}; 的含义是什么?

最佳答案

您可以使用 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/

相关文章:

javascript - 什么 ;(function(global,$,_){ }(app,jQuery,_));意思是?

javascript - Famo.us ScrollView 高度

javascript - 如何知道是否已使用 javascript 加载图像

javascript - 找到了许多正则表达式,但在我的 javascript 中尝试它们失败了

javascript - 正则表达式与 "1 1"JavaScript 中的数字不匹配

javascript - Famo.us 'Fastclick' 在手机上触发两次点击

javascript - 如何在 famo.us 中关闭一个 View 并显示另一个 View

javascript - 如何通过javascript检索域名?

javascript - 在深 Z 空间中单击 Famo.us 表面

famo.us - 如何从渲染树中删除节点?