1

我在 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. 如果我想将 width 和 height 属性传递到SettingsView.ctor 中,然后我可以将它们传递到View.ctor 中怎么办?这就是apply方法的作用吗?
  3. 是什么意思SettingsView.DEFAULT_OPTIONS = {};
4

1 回答 1

1

您使用 apply 来... apply... 一个对象的参数数组。在 ** MDN上可以找到更好的描述

简写形式是 apply 需要 (1) 一个值this,其次是一个参数数组。您会注意到在您的示例中没有数组。那是因为如果您使用arguments,您可以将封闭函数的所有参数传递到正在调用的对象中。在这种情况下,传入的参数SettingsView()将随后应用于封闭的View

SettingsView函数之外你会看到原型SettingsView被用来创建一个新View的,然后我们将构造函数设置SettingsView为基本上调用SettingsView()

看看循环是如何完成的。因此,当调用SettingsView例如var mySettings = new SettingsView();我传递给构造函数的所有参数的构造函数时,将传递给视图的构造函数。此外,Surface还使用预先填充到“设置”的内容选项来创建。在现实世界中,这可能是一个按钮、图像或您可能想要重用的东西。

如果您查看源代码,您会发现View有一个 DEFAULT_OPTIONS 对象具有各种属性,如果我们在创建View. 在您的示例中,我们基本上只是清除该对象的内容。请参阅文档中您需要传递给典型 famo.us 视图的内容,以便您创建的视图具有所有必要的属性/选项。

至于将大小属性传递给视图,它不是那样工作的。将 famo.us 视图视为其他 famo.us 可渲染对象(表面)的分组 但是,您可以将变量传递给 SettingsView 构造函数,然后用于设置它包含的 Surface 的宽度和高度值。这就是你的做法。

我绝对建议你买一本关于这方面的书,我发现说 Javascript目前非常有用,因为它处理了通常的“什么是计算机程序?” 即兴演奏。原型之类的东西对于构建 JS 应用程序非常重要,当您使用 famo.us 时,这个过程经常发生

这可能需要一些编辑才能更清楚。

于 2014-05-20T15:50:40.117 回答