1

我不太确定如何用单词来陈述这个问题,因为我不知道该怎么称呼它 -> 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...

4

2 回答 2

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 - 对象模型的详细信息MDN - 继承和原型链

于 2012-12-23T06:33:49.430 回答
3

根据标题中的问题,不,它们是不同的。

Obj['var'] = something

相当于:

Obj.var = something;

prototype这与在某个对象的属性上设置值完全不同。

Obj.prototype.var = somthing
于 2012-12-23T06:29:25.280 回答