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;
 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值