Javascript Obj[';var';]和Obj.prototype.var有区别吗?
我不太清楚如何用词来表达这个问题,因为我不知道该怎么称呼它-->Javascript Obj[';var';]和Obj.prototype.var有区别吗?,javascript,oop,Javascript,Oop,我不太清楚如何用词来表达这个问题,因为我不知道该怎么称呼它-->Obj['var]=something 我相信这个标题总结了这一点,用这两种不同的方式声明一个对象的变量或函数有什么不同吗,或者它们是做同一件事的相同、不同的方式吗 编辑: 我的代码示例如下: 很抱歉,变量名称令人困惑,请注意大写字符:/ buttons = document.getElementsByClassName('button'); Buttons = new Button_Objs(); for (i = 0 ; i
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);
}
}
当我试图使用
button.prototype.setState=func…
时,浏览器会对我大喊大叫。根据标题中的问题,它们是不同的
Obj['var'] = something
相当于:
Obj.var = something;
这与在某个对象的prototype
属性上设置值完全不同
Obj.prototype.var = somthing
根据标题中的问题,不,它们是不同的
Obj['var'] = something
相当于:
Obj.var = something;
这与在某个对象的prototype
属性上设置值完全不同
Obj.prototype.var = somthing
Obj['var']=…
(就此而言,Obj.var=…
)将一个属性分配给Obj
所引用的对象
例如:
var obj = {};
obj['foo'] = 'bar';
// or obj.foo = 'bar';
console.log(obj.foo); // shows 'bar'
function Foo() {}
Foo.prototype.bar = 'baz';
var foo = new Foo();
console.log(foo.bar); // shows 'baz'
Obj.prototype.var=…
很可能会抛出错误,除非Obj
是一个函数。函数有一个名为prototype
的特殊属性,当函数作为构造函数调用时,所有新实例都从该属性继承,即使用new
关键字调用
例如:
var obj = {};
obj['foo'] = 'bar';
// or obj.foo = 'bar';
console.log(obj.foo); // shows 'bar'
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
虽然这两个语句都将属性指定给对象(在这方面,它们是“相同的”),但结果却完全不同
Obj['var'] = something
如果您想了解有关JavaScript中原型继承的更多信息,请查看和。
Obj['var']=…
(和Obj.var=…
)为Obj
引用的对象分配属性
例如:
var obj = {};
obj['foo'] = 'bar';
// or obj.foo = 'bar';
console.log(obj.foo); // shows 'bar'
function Foo() {}
Foo.prototype.bar = 'baz';
var foo = new Foo();
console.log(foo.bar); // shows 'baz'
Obj.prototype.var=…
很可能会抛出错误,除非Obj
是一个函数。函数有一个名为prototype
的特殊属性,当函数作为构造函数调用时,所有新实例都从该属性继承,即使用new
关键字调用
例如:
var obj = {};
obj['foo'] = 'bar';
// or obj.foo = 'bar';
console.log(obj.foo); // shows 'bar'
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
虽然这两个语句都将属性指定给对象(在这方面,它们是“相同的”),但结果却完全不同
Obj['var'] = something
如果您想进一步了解JavaScript中的原型继承,请查看和。
obj.var
与obj['var']
相同。玩原型是不同的。原型只是一个对象。它是另一个对象用作原型的任何对象。“当试图使用时,浏览器会对我大喊大叫……”:因为按钮
不是一个函数。默认情况下只有函数有.prototype
属性。@FelixKling我很困惑,那么按钮到底是什么?什么使它成为一个函数?它是一个对象<代码>按钮
带有大写字母B
在您的示例中是一个函数。您正在调用new Button()
,因此在函数中,此
引用从按钮继承的空对象。prototype
。然后将该对象传递到constructSafetyButton
中,您将其称为button
obj。var
与obj['var']
相同。玩原型是不同的。原型只是一个对象。它是另一个对象用作原型的任何对象。“当试图使用时,浏览器会对我大喊大叫……”:因为按钮
不是一个函数。默认情况下只有函数有.prototype
属性。@FelixKling我很困惑,那么按钮到底是什么?什么使它成为一个函数?它是一个对象<代码>按钮
带有大写字母B
在您的示例中是一个函数。您正在调用new Button()
,因此在函数中,此
引用从按钮继承的空对象。prototype
。然后,您将该对象传递到constructSafetyButton
,您将其称为button
。嗯,我的问题可能措辞不当。在对象中创建新变量或函数时,使用prototype.newFunction
或Obj['newFunction']]
时是否存在差异?@MichaelMitchell您能用更多示例更新您的问题或重新措辞吗?这听起来像是我试图回答的。你的问题是关于方括号和引号的使用,或者关于原型,或者两者都有。嗯,我的问题可能措辞不好。在对象中创建新变量或函数时,使用prototype.newFunction
或Obj['newFunction']]
时是否存在差异?@MichaelMitchell您能用更多示例更新您的问题或重新措辞吗?这听起来像是我试图回答的。你的问题是关于方括号和引号的使用,或者关于原型,或者两者兼而有之。