我不太确定如何以单词术语陈述问题,因为我不知道该怎么称呼它 - > Obj['var] = something
。
我相信标题总结起来,以这两种不同的方式声明对象的变量或函数是否有任何区别,或者它们是相同的,做同样事情的不同方式。
修改
我的代码示例:
对于令人困惑的变量名称,请注意大写字符:/
buttons = document.getElementsByClassName('button');
Buttons = new Button_Objs();
for (i = 0 ; i < buttons.length ; i++){
button = buttons[i];
Buttons['button' + i] = new Button(button);
}
var Button = function(elem){
this.buttonType = elem.getAttribute('button-type');
if (this.buttonType = 'safety'){
constructSafetyButton(elem, this);
}
}
function constructSafetyButton(elem, button){
button['setState'] = function(state){//do something}
在尝试使用button.prototype.setState = func...
答案 0 :(得分:4)
Obj['var'] = ...
(以及此Obj.var = ...
)为Obj
引用的对象分配属性。
示例:
var obj = {};
obj['foo'] = 'bar';
// or obj.foo = 'bar';
console.log(obj.foo); // shows 'bar'
Obj.prototype.var = ...
是功能,否则 Obj
很可能会抛出错误。函数有一个名为prototype
的特殊属性,当函数作为构造函数调用时,所有新实例都会从该属性继承,即使用new
关键字调用。
示例:
function Foo() {}
Foo.prototype.bar = 'baz';
var foo = new Foo();
console.log(foo.bar); // shows 'baz'
由于函数本身也是对象,因此您也可以为它们分配属性
Foo.someProp = 'someVal';
但这不会影响Foo
创建的实例。新实例仅从Foo.prototype
继承:
console.log(foo.someProp); // shows undefined
虽然两个语句都赋予对象属性(在这方面它们是“相同的”),但结果完全不同。
如果您想了解有关JavaScript中原型继承的更多信息,请查看MDN - Details of the Object Model和MDN - Inheritance and the prototype chain。
答案 1 :(得分:3)
根据标题中的问题,它们没有区别。
Obj['var'] = something
相当于:
Obj.var = something;
这与在某个对象的prototype
属性上设置值完全不同。
Obj.prototype.var = somthing