Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Obj[';var';]和Obj.prototype.var有区别吗?_Javascript_Oop - Fatal编程技术网

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您能用更多示例更新您的问题或重新措辞吗?这听起来像是我试图回答的。你的问题是关于方括号和引号的使用,或者关于原型,或者两者兼而有之。