> test.getName()
> test["getName"]()
追加一下,
在javascript设计模式中有如下代码:
var viewCommand = (function() {
var tpl = {
product : [
'<div>',
'<img src="{#src#}"/>',
'<p>{#text#}</p>',
'</div>'
].join(''),
title : [
'<div class="title">',
'<div class="main">',
'<h2>{#title#}</h2>',
'<p>{#tips#}</p>',
'</div>',
'</div>'
].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,也成功运行并输出。
所以说书中这行代码是多余的?
[] 可以访问带空格属性。
['']支持获取动态属性
都是获取对象的属性,但是当属性是数字开头或者是js关键字的时候只能用[]