JavaScript Object只是一个关联数组吗?
Is JavaScript Object nothing but an associative array?
好的,我只是在浏览JavaScript的基础知识,我正在学习objects
,我遇到了这个例子…
var person = {
firstname : "Smith",
lastname : "Bach"
};
PHP中写的是
$person = array(
"firstname"=>"Smith",
"lastname"=>"Bach"
);
所以这是一回事还是我在理解概念上犯了错误?
不,对象不止于此。
Object确实是一个映射/字典,但另外每个对象从另一个对象继承一些属性(键值对)。另一个对象叫做prototype。
例如:var o = {
x: 1
};
console.log(o.x === undefined); // false, obviously
console.log(o.toString === undefined); // false, inherited from prototype
最常见的是通过创建一个带有构造函数的对象来设置原型:
var d = new Date();
console.log(d.hasOwnProperty('getYear')); // false, it's inherited
编辑:下面是原型如何使用构造函数工作的(它是在JS中做OOP的一种方式):
// constructor function
// starts with capital letter, should be called with new
var Person = function (name, age) {
// set properties of an instance
this.name = name;
this.age = age;
};
// functions to be inherited are in the prototype
Person.prototype.sayHello = function () {
return this.name + ' is ' + this.age + ' old';
};
// new:
// - creates the object
// - sets up inheritance from prototype
// - sets the object as the context of the constructor function call (this)
var p = new Person('Jason', 27);
console.log(p.sayHello());
它们是关联数组,但不是只是关联数组。Object
原型中有一些函数(如.toString()
),其名称可能与属性名称冲突。对象可以通过其他函数构造,也可以被赋予更多的继承属性。(请注意,普通对象不具有的一件事是用于计数条目的.length
属性,就像数组对象一样。术语"关联数组";可能不是JavaScript对象的最佳选择;它们是对象,一旦你熟悉了JavaScript,这就足够了。)
edit -我的意思是:
var o = {};
alert("toString" in o); // alerts "true"
因此,新创建的空对象似乎有一个名为"tostring"的属性。JavaScript的问题是只有一个属性访问操作符(两个,但它们是同一事物的两种风格),因此无法区分对数组内容的访问和对数组API的访问。(另外,在JavaScript中使用"array"这个词并不是一个好主意,因为这在JavaScript中意味着一些不同的东西——数组是一种具有特殊属性的对象类型。)
EcmaScript 5有一些机制来定义对象属性,使它们不可变且不可迭代,这对一些有帮助。如果你想存储一个名为tostring的属性还是有问题的
相关文章:
- 多维关联数组的最后一个索引
- 返回一个关联数组,而不是mongoose中的文档数组
- 如何按一个仍保持字母顺序的特性值(另一个特性值)对关联数组进行排序
- 按每个数组中的一个值对一组关联数组进行排序
- 与设计用户相关联的多个模型-根据角色选择填写一个模型
- 将切换与另一个函数关联
- PHP:获取关联数组中最后一个元素
- Extjs有一个关联
- JavaScript:将一个整数与一长串字符串关联起来
- 如何将一个变量与其他两个变量 (mysql) 相关联
- 另一个对象的值作为 Javascript 中另一个关联数组中的值
- 在 JavaScript 中创建一个关联数组
- 在 jquery 中从隐藏的哈希创建一个关联数组
- 是一个与JavaScript的号码相关联的JSON号码
- 使用 jQuery.post() 的 for 循环中的关联数组只存储最后一个条目
- Jquery 将两个数组(键、值)关联到一个具有重复键的数组中
- 从两个常规数组创建一个关联数组
- 声明一个关联数组以在 for 循环中使用
- 如果一个模型在续集中引用自身,如何让所有孩子或父母在多对多关联中
- 如何关联一个可以拥有同一模型本身的子模型的模型