从数组到对象


无功myarr = {红','蓝色','','purple};
myarr; / / 红 {
myarr { 0 }; / /红
myarr { 3 }; / /紫色





你对数组很熟悉。我们可以理解一个键对应的值,并且已经在阵中,这是已经默许了。(例如,上面的代码,其关键是红色、蓝色、价值,黄色,紫色)。

然后可以将对象理解为自定义键数组。


var英雄= {
品种:'turtle,
职业:忍者
};




上面的代码我们可以理解:

1个名字。对象是英雄。

2。与数组不同取代的{ 'symbol{

The attributes of 3. 物体(如品种和职业)用符号,分隔。

4键和值的语法是键:值

还需要注意的是,无论属性(或键)放在双引号、单引号或没有引号上,它们的结果都是一样的。以下代码是相同的。


var obj = { 1,2 }:B;
var obj = {'a':1 B:2 };
var obj = { :1,B:2 };



推荐的写作方式不是将属性放入引号中,除非属性的名称是特殊符号,如数字或空格等。



这篇文章非常简单,重要的是要注意符号}定义的数组,而对象被定义为符号{ }



元素、属性、方法

当我们学习数组时,我们可以说数组包含元素,当涉及到对象时,我们可以改变参数。


var动物{ {
名称:'dog,
运行:函数(){
警报();
}
}



名称是属性(属性),运行本身是一个函数。在这个对象中,我们调用方法(方法)。

访问对象的属性

有两种方法访问对象的属性。

在数组的形式如:动物{ 'name' }

接入点:animal.name

第一个访问的方法适用于任何情况。但如果属性是无效的,'1name'or'my名字命名的最后一部分是错误的。这一点是要注意的。



下面是对象访问的一个示例


var图书{ {
名称:'javascript基础,
出版:机械。
作者:{
名:'nicholas,
姓:法的应用
}
};





1。得到作者对象FirstName属性




book.author.firstname / /尼古拉斯





2。得到作者对象的LastName属性,我们尝试用另一种方法




本书'author} { { 'lastname / /夏}



我们还可以使用混合访问模式。

本书。作者{ 'lastname}或{ }书'author。姓都是有效的,要灵活运用



在动态属性的情况下,使用数组来访问对象。


VaR的关键= 'lastname
书。作者{键};



对象调用方法


var
品种:'turtle,
职业:忍者,
表示:函数(){
return'i是+ hero.occupation;
}
}
Hero.say();





访问对象的方法非常简单,有点在线,但它也可以用数组的方式看起来怪异。

如英雄{ }()';

不建议在访问对象时尽可能使用这种方法。



修改属性和方法

由于Javascript是一种动态语言,所以可以随时修改对象的属性和方法。


var英雄};



英雄是一个空对象。


类型hero.breed; / /未定义



它表明英雄对象没有繁殖属性。

接下来,您可以添加属性和方法。


hero.breed = 'turtle;
hero.name = 'leonardo;
hero.sayname =函数(){ return的英雄的名字;};



调用方法




Hero.sayName(); / /列奥纳多



删除属性




删除hero.name; / /真的
(英雄。sayname); / /失败




这


var
名称:'rafaelo,
sayname:函数(){
返回this.name;
}
}
Hero.sayName(); / / rafaelo



这意味着对象的意义,以及关于这一点的复杂问题稍后讨论。



构造函数(构造函数)

创建对象的另一种方法是使用构造函数直接看到示例。


函数英雄(){
this.name = 'refaelo;
}
英雄=新英雄();
hero.name; / / refaelo



这种方法的优点是可以在创建对象时传入参数。


函数英雄(名称){
this.name =名称;
this.whoareyou =函数(){
返回this.name;
}
}

VaR HI =新的英雄('nicholas);
Hi.whoAreYou(); / /尼古拉斯



当你想注意的时候,不要失去新的操作员。

全局对象

在过去的几天里,我们已经说过,全球变量已经提到。我们应该尽量避免使用全局变量。当我们学习对象时,我们在观察全局变量是关于什么的。实际上,全局变量是全局对象的属性。如果宿主环境是Web浏览器,则全局变量是窗口。

如果我们定义var a = 1;

我们能理解:

全局变量a,

作为窗口的一个属性,我们可以称之为窗口,或窗口{'a' }

看看预定义函数parseInt('123 m);我们可以写window.parseint('123 m);



构造函数属性

设置对象之后,后台创建了一个隐藏的属性、构造函数。




h2.constructor; / /英雄(名字)



因为构造函数的属性是对函数的引用,如果不关心H2对象是什么创建的,只关心创建一个新对象和H2,可以使用以下写作


VaR H3 = h2.constructor('nicholas);
h3.name; / /尼古拉斯


让我们来看看下面的意思


var;
o.constructor; / /对象()
类型o.constructor; / / 功能



事实上,它隐藏了新对象(),更深层次的应用程序稍后将解释几个教程。



instanceof运算符

是用来判断一个物体是由指定的构造函数创建。


函数英雄(){
}
新英雄();
var;
H是英雄; / /真的
H是对象; / /假
o实例对象; / /真的




注意,是不是后面的参考功能如H是(英雄)书写错误; / /错误

函数返回对象

构造函数可以用来创建一个对象,或者一个对象可以通过一个普通函数返回到对象来创建一个对象。


函数工厂(名称){
返回{
名称:名称
};
}



用这种方法创建对象


var o =厂();
o.name




让我们来看一个返回到对象的相对少见的构造函数的例子。




函数C(){
这个= 1;
返回{ 2 };
}

新的C();
型C2。 / /未定义
C2 2;



它表明它不返回这个,而是返回到对象{ 2 },重点是注意这个。



传输对象

如果一个对象被传递给一个函数,那么这个转移就是一个引用。如果这个引用被改变了,原始对象将会被改变。

下面是一个对象赋值的例子


VaR原= { name: 'nicholas};
原始副本;
copy.name; / / 'nicholas;
copy.name =詹森';
original.name; / /詹森';





修改复制的属性名也等于修改原始的属性名。

与传递给函数的对象相同。




函数修改(o){
o.name =詹森'
}
VaR原= { name: 'nicholas};
修改(原件);
original.name; / /杰森





比较的对象

两个对象的比较,如果是真的,是同一对象的引用。


Var Fido = {品种:'dog};
Var Benji = {品种:'dog};

石磊= = = / /假狗;
石磊= = / /假狗;




上面的代码不是同一个引用,所以都是错误的。