javascript - js 中 [ ] . 区别 是什么 => 书中这行代码是多余的?
高洛峰
高洛峰 2017-04-11 12:39:02
[JavaScript讨论组]
> test.getName()

> test["getName"]()

追加一下,
在javascript设计模式中有如下代码:

var viewCommand = (function() {
    var tpl = {
        product : [
            '

', '', '

{#text#}

', '

' ].join(''), title : [ '

', '

', '

{#title#}

', '

{#tips#}

', '

', '

' ].join('') }, html = ''; function formatString(str, obj) { return str.replace(/\{#(\w+)#\}/g, function(match, key) { return obj[key]; }); } var Action = { create : function(data, view) { if (data.length) { for (var i = 0, len = data.length; i < len; i++) { html += formatString(tpl[view], data[i]); } } else { html += formatString(tpl[view], data); } }, display : function(container, data, view) { this.create(data, view); document.getElementById(container).innerHTML = html; html = ''; } } return function excute(msg) { msg.param = Object.prototype.toString.call(msg.param) === "[objet Array]" ? msg.param : [msg.param]; //Action内部调用方法可能引用this,为保证作用域中的this指向正确,故传入Action Action[msg.command].apply(Action, msg.param); } })();

书上原话说“Action内部调用方法可能引用this,为保证作用域中的this指向正确,故传入Action”

但是,经过实验,即

var o = function () {
    var Action = {
        age: 1,
        getAge: function() {
            console.log(this.age);
        }
    }

    return {
        excute : function() {
            Action['getAge']();
        }
    }
    }();
o.excute();

未传入Action,也成功运行并输出。

所以说书中这行代码是多余的?

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回复(3)
PHP中文网

都是获取对象的属性,但是当属性是数字开头或者是js关键字的时候只能用[]

PHPz

['']支持获取动态属性

天蓬老师

[] 可以访问带空格属性。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号