使用array时我们会说element ,使用object 时我们会所 property,在javascript中没有任何的不同,仅仅是被当作terminology,
properties是来自于其他语言。
一个object 的property可能包含一个function,这个function 被称为他的method如:
var dog = {
name:'Benji',
talk:function (){
alert('wang!wang!');
}
};
当然它也是可以存储到数组中:
var a = [];
a[0] = function(what) {
alert(what);
};
a[0]('Boo');
/**
*2、联合数组 、hashes
*/
一些语言里,这个会有一些不同
*普通的array可以被索引,或者说是可以被列举,key是number
*associative array 被称作hash ,key是string。
javascript 中,arrray 是 索引数组(indexed array)
object 是 联合数组(assiociative array),如果你想使用hash 你就可以使用object.
/**
*3、访问object 的properties
*/
有两种方式去访问object 的properties
.使用方括号标识 如 hero['name']
.使用点号标识 如: hero.name
点号访问容易被书写和阅读,但是有些特殊的是不能使用的,但这个properties 的name 不是一个有效的 variable时,你就不能使用
点号标识。
让我们看看这个object
var hero = {name:'Turtle',occupation:'Ninja'};
访问属性 hero.name “Turtle"
访问不存在的属性将会得到一个undefined,如: >>>hero.haircolor "undefined"
object 可以包含任意数据,任意object.
var book = {name:'Catch-22',published:'1961',author:{firstname:'Joseph',lastname:'Heller'}};
book对象里有一个author object.
可以如此访问:
>>>book.author.firstname
"Joseph"
或者
>>>book['author']['firstname']
也可以混淆着用:
>>>book['author'].firstname
有的时候你可能需要方括号,当访问的属性未知时:
>>>var key = "firstname";
>>>book.author["firstname"]
调用一个对象的方法
method 只是一个属性是function 所以你可以用相同的方法来访问这个属性,只是在后面添加一个小括号就好了.
var hero = {breed:'Turtle',occupation:'Ninja',say:function(){return 'I am '+ hero.occupation;}};
>>> hero.say()
传递参数给这个方法,就像使用普通方法一样就可以了,也可以使用括号的调用方式去调用。
>>>hero["say"]
建议:
×尽量使用点号去访问属性和方法
×尽量不使用引号去设置属性和方法名
methods 和 properties 的更改
javascript 是一个dynami language ,它允许在使用时更改属性和方法,这包括创建新的和删除存在的,如:一个空对象:
>>> var hero = {};
访问不存在属性
>>> hero.breed
"undefined"
添加属性和方法。
hero.breed = 'turtle';
hero.name = 'Lenoardo';
hero.sayName=function(){ return hero.name;};
调用方法:
hero.sayName();
“Lenoardo”
删除这个属性
>>>delete hero.name
true
然后再调用
>>>hero.sayName()
"reference to undefined property hero.name"
使用这个值,在前一个例子里,这个方法使用sayName来访问这个hero 的object的属性name来访问
在前一个例子的基础我在定义一个
var hero = {
name: 'Rafaelo',
sayName: function() {
return this.name;
}
};
>>>hero.name
"Rafaelo"
当你访问这个对象时,它得到的是当前对象(current object or this object)
/**
*4、function constructor
*/
使用构造function 去创建对象
function Hero(){
this.occupation = 'Ninja';
}
在使用这样的function 创建对象时,你必须使用new来创建这个对象。
>>>var hero = new Hero();
>>>hero.occupation
"Ninja"
使用构造的好处在于创建新对像时,可以通过传递参数,给对象的属性分配value.
function Hero (name){
this.name = name';
this.occapation = 'Ninja';
this.whoAreYou = function (){
return "I am " +this.name + ", I'm a" this.occapation;
};
}
你可以创建不同的对象,通过相同的构造。
>>> var h1 = new Hero('Miche');
>>> var h2 = new Hero('Donate');
>>>h1.whoAreYou()
“I am Miche ,I'm a Ninja"
>>>h2.whoAreYou()
“I am Donate ,I'm a Ninja"
......
根据规定,constructor function 首字母应该大写,所以当年看到function 的首字母大写你就一概知道这不是一个寻常的function,
当你调用一个function 当作constructor 来调用的话,但是你又忘记了写new这个关键字,那么将会的到一个undefined
如果没有new我们就不能创建新的对象,function 会像普通的function 被调用,但是这个function没有return ,那么它就会变成一个
undefiend
/**
* 5、全局的object
*/
浏览器的javascript 提供了一个全局的对象window,你定义的全局变量实际上是这个全局对象的属性。
如:
var a = 1; 这是一个全局变量可以这么访问它。
>>>a
1
也可以以全局对象window的属性的方式访问它。
>>>window.a
1
>>>window["a"]
1
再回头看上面的例子,
>>>function Hero(name){this.name = name;}
>>>var h = Hero('Bob');
>>>typeof h
"undefined"
>>> h.name
"h has no property"
因为你在Hero内部使用了this,这样就相当于定义了一个全局的对象,
你可以这样访问它
>>>name
"Bob"
>>>window.name
"Bob"
>>>window["name"]
"Bob"
.....
但是你用new调用同样的constructor 时,那么这个new object 将会被return 掉
>>> var h2 = new Hero('Michelangelo');
>>> typeof h2
"object"
>>> h2.name
"Michelangelo"
全局的function 你可能在前面也用到过:parseInt() winodw.parseFloat()....
/**
*6、constructor property
*/
当一个对象被创建的时候,constructor属性将后被后面悄悄的被赋值,你可以在你新创建的对象里直接调用这个属性。可以这样:
>>> var h3 = new h2.constructor("zhangsan");
>>>h3.name
"zhangsan"
如果一个对象不创建,那么他的constructor将在内部被创建,
>>>var o = {}
>>>o.constructor
>>> typeof o.constructor
"function"
/**
*7、instanceof 的使用
*/
使用instanceof 可以知道你创建的对象的特殊构造是什么
>>> function Hero(){}
>>> var hero = new Hero();
>>> var o = {}
>>> h instanceof Hero
true
>>> h instanceof Object
false
>>>o instanceof Object
**注意
在function 后面不使用圆括号,因为这不是一次调用只是被当作一次参考而已。
/**
*7、function return object
*/
也可以通过一个普通的function 创建一个constructor function 而不使用 new .一个function 一些属性的执行,然后再把这个得到的
value 再return 掉,如
function factory (name){
return {name:name};
}
使用这个function
>>> var o = factory('one');
>>>o.name
"one"
>>>o.constructor
Object
现在你也可以通过constructor function 和return object 这就意味你可以更改它的一些默认行为。
普通的构造:
function C(){
this.a = 1;
}
>>>var c = new C();
>>>c.a
1
使用现在的方法
function C2(){ this.a = 1; return {b:2}}
>>> var c2 = new C2();
>>>typeof c2.a
"undefined"
>>> c2.b
2
这是因为return 了object 包含属性a的那个constructor 它return 了其他的object它包含了b,都是因为return 一个object .
另外构造也是可以return其他的东西。
/**
*8、object 的传递
*/
当你copy或者传入一个object时,这仅仅这是一个referenece 的传递,所以说当你更改一个对象的copy对象时,或者是这个的对像
的传递对象时,实际更改的是这个对象的原始对象如:
>>>var original = {howMany :1} ;
>>> var copy = original;
>>>copy.howMany
1
>>>copy.howMany = 100
>>>original.howMany
100
同样当进行传递后:
>>> var original = {howmany: 100};
>>> var nullify = function(o) {o.howmany = 0;}
>>> nullify(original);
>>> original.howmany
0
/**
*9、对象的比较
*/
当你进行相同对象的不同引用,进行比较就会得到一个true,当进行两个实际对象的比较精确到method property 相同也会得到一个
false.
>>>var fido = {breed:'dog'};
>>>var benji = {breed:'dog'};
>>> fido == benji
false
>>> fido === benji
然后你创建一个新的对象分配给它一个对象,这个时候再进行比较
>>> var mydog = benji;
>>> mydog == benji
true
分享到:
相关推荐
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写,同时也易于机器解析和生成。它基于JavaScript(Standard ECMA-262 3rd Edition - December 1999)的一个子集。 JSON采用完全独立...
JavaScript Object Browser扩展是一种针对开发人员的实用工具,它专门设计用于可视化和探索JavaScript对象的结构。这个扩展在浏览器环境中提供了一个交互式的界面,允许开发者深入理解代码中的对象、属性和方法,...
这篇名为“JavaScript Object toString 初始补充”的博客文章可能深入探讨了`toString`方法在JavaScript中的应用和一些不常见的用法。作者Will-2011在iteye.com上分享了这个话题,这通常意味着这篇文章会包含代码...
Mastering JavaScript Object-Oriented Programming 2016 | ISBN: 1785889109 | English | 287 pages | PDF | 1.9 MB With this book, we'll provide you with a comprehensive overview of OOP principles in ...
JSON,全称JavaScript Object Notation,是一种轻量级的数据交换格式。它采用完全独立于语言的文本格式,同时也被广泛用于非JavaScript环境。JSON的设计目标是简洁和易于阅读及编写,同时也易于机器解析和生成。它是...
JavaScript Object Programming 英文无水印pdf pdf所有页面使用FoxitReader和PDF-XChangeViewer测试都可以打开 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传...
Javascript Object Oriented Programming 英文无水印pdf pdf所有页面使用FoxitReader和PDF-XChangeViewer测试都可以打开 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请...
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,设计用于高效地传输和存储数据,尤其适合服务器与JavaScript之间的交互。它的语法简洁且易于人类阅读和编写,同时也容易让机器解析和生成。JSON格式...
那位大哥有javascript object 大全
JavaScript Object和JSON是Web开发中两个非常重要的概念,它们在数据交换和存储中扮演着关键角色。这篇博客将深入探讨这两个主题,以及它们之间的关系。 首先,JavaScript Object(JS对象)是JavaScript语言中的...
This brief book explains the advantages of the object model, inheritance, both classical and prototypical, and shows how these concepts can be implemented in JavaScript. It also shows how object ...
Mastering JavaScript Object-Oriented Programming 英文无水印pdf pdf所有页面使用FoxitReader和PDF-XChangeViewer测试都可以打开 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如...
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式
Build sophisticated web applications by mastering the art of Object-Oriented Javascript About This Book Learn popular Object-Oriented programming (OOP) principles and design patterns to build robust ...
### JavaScript中的Object与Function #### 一、引言 随着JavaScript的发展与标准化,这门语言已经成为Web开发领域不可或缺的一部分。然而,在深入学习JavaScript的过程中,不少开发者对于语言内部的一些概念仍感...
首先,`toString`方法是所有JavaScript对象的原型`Object.prototype`上的一个方法。这意味着,无论你创建何种类型的对象,它们都继承了这个方法。默认情况下,如果直接对一个对象调用`toString`,它会返回一个表示该...
在这份“Javascript Object 对象学习笔记”中,将深入探讨JavaScript对象的基础知识、属性和方法。首先,我们需要明白什么是对象。在JavaScript中,对象是一种复合数据类型,它将许多值(原始值或其他对象)聚合在...