swfupload 源码阅读笔记三

SWFUpload.prototype.initSettings = function () {
        this.ensureDefault = function (settingName, defaultValue) {
                this.settings[settingName] = (this.settings[settingName] == undefined) ? defaultValue : this.settings[settingName];
        };

        // Upload backend settings
        this.ensureDefault("upload_url", "");
        this.ensureDefault("preserve_relative_urls", false);
        this.ensureDefault("file_post_name", "Filedata");
        this.ensureDefault("post_params", {});
        // 略

 

这里比较有趣的是 this.ensureDefault 的定义。

 

不过是一个设置默认值的简单的 method, 但是其中的细节需要学习。作为一个 js 菜,我最初是疑惑 this.ensureDefault 体内的 this.settings 的 this。我实在搞不清这个 this 绑定的是什么,在看了下面的解释之后, 我才豁然开朗,这里严重推荐:

 

http://stackoverflow.com/questions/133973/how-does-this-keyword-work-within-a-javascript-object-literal

 

这里假设,若 ensureDefault 不定义成 public method, 而是定义成一个 private function 会怎样?按照上面链接中的解释,private function 中的 this 会绑定到 "global" object, 也就是浏览器关联的 window object,将无法使用 this.settings, 也就意味着 ensureDefault 需要再传递第3个参数。

 

为了保持接口的简洁,当然要定义成 public method.

 

需要注意的是,在退出 initSettings 时要删除 ensureDefault 方法,毕竟只用一次:

 

delete this.ensureDefault;
 

 

你可能感兴趣的:(JavaScript,浏览器,prototype)