Javascript对象部分
一、基本部分
1.1中的所有变量。JavaScript是除了null和undefined之外的对象。
2.Jscript支持四种类型的对象:内部对象、生成对象和宿主给定的对象(所有BOM和DOM对象都是宿主对象。)和ActiveX对象(外部组件)。
3.Microsoft Jscript提供了11个内部(或“内置”)对象。它们是数组、布尔、日期、函数、全局、数学、数字、对象、正则表达式、错误和字符串对象。
4.对象只是一种特殊的数据。对象有属性和方法。JavaScript是一种面向对象的语言,但是JavaScript不使用类。JavaScript基于原型,而不是类。
5.属性:它是属于特定对象的变量。方法:它是一个只能由特定对象调用的函数。
6.Jscript对象是属性和方法的集合。一种方法是作为对象成员的函数。属性是一个值或一组值(以数组或对象的形式),并且是对象的成员。
7.javascript对象基于构造函数。当构造函数创建一个新对象时,可以说是实例化了一个新对象。属性是构造函数中的变量。
用构造函数实例化的对象:
cat=new Animal();8.Javascript是一种基于对象的语言,你遇到的几乎所有东西都是对象。但是,它不是真正的OOP语言,因为它的语法中没有类。
复制的代码如下:脚本类型=' text/JavaScript '//对象是名称/值对的集合。var browser={//对象是用花括号括起来的Name3360' Firefox '和Kernel:' Gecko'}。/script
复制代码如下://访问属性browser.name//'Firefox'浏览器['内核']//'gecko '
对象(objct)是属性的集合,每个属性都由“名称/值对”组成。js还定义了一个特殊的对象数组——,它是编号值的有序集合。Js还定义了一个特殊的对象——函数,这是一个带有相关可执行代码的对象。它通过调用函数来执行代码,并返回操作结果。
明确JS中的概念:‘基于对象=面向对象’。4.JS中没有Class,但是它取了一个新的名字叫做“原型对象”,所以‘Class=prototype object’
二:类(原型对象)和对象(实例)的区别和联系
1.类(原型对象)是抽象的和概念性的,代表一类事物。2.对象是具体的、实用的,代表具体的事物。3.类(原型对象)是对象实例的模板,对象实例是类的个体。一个常见的误解是数字的字面不是一个对象。这是因为JavaScript解析器中的一个错误,该解析器试图将点运算符解析为浮点数值的一部分。
有很多方法可以让数字的文字值看起来像一个对象。
2.toString();//第二个点可以正常解析。2 .toString();//注意点(2)前的空格。toString();//2首先计算并删除属性
删除属性的唯一方法是使用delete运算符;将属性设置为undefined或null并不会真正删除属性,只会删除属性和值之间的关联。
面向对象JavaScript的三个特点
封装:不考虑内部实现,只考虑函数使用的继承:从已有对象继承新对象多态:所谓多态是指一个引用在不同情况下的多种状态,1。包装
封装就是为了方便,把同类事物的共性(包括属性和行为)放在一个类中。例如,人们可以通过以下方式封装:
人{年龄(属性1)身高(属性2)性别(属性3)
做事(第一幕)走路(第二幕)说话(第三幕)
封装的好处:
封装保护内部数据的完整性;封装使对象重构更容易;弱化模块之间的耦合,提高对象的可重用性;有助于避免命名空间冲突;请看下面的例子:
复制的代码如下: Script Type=' text/JavaScript ' varboy={ };//创建一个空对象boy.name='小明';//根据原型对象的属性分配boy.age=12
var girl={ };Girl.name='小红';女孩年龄=10岁;/script
这是最简单的封装,将两个属性封装在一个对象中。然而,这篇文章有两个缺点。第一,如果生成的例子多,写起来会很麻烦;其次,没有办法看到实例和原型之间的联系。
构造函数模式
为了解决从原型对象生成实例的问题,Javascript提供了一种构造器模式。
所谓的‘构造函数’实际上是一个普通函数,但是这个变量是内部使用的。通过在构造函数上使用新的运算符,可以生成一个实例,并将此变量绑定到实例对象。
例如,男孩和女孩的原型对象现在可以这样写:
复制的代码如下:脚本类型=' text/JavaScript '函数人(姓名、年龄){this。name=namethis.age=年龄;}/脚本
我们现在可以生成实例对象。
复制的代码如下: Script Type=' text/JavaScript ' var boy=new person('小明',' 12 ');Var girl=新人('小红',' 10 ');
alert(boy . name);//小明机警(boy . age);//12/脚本
此时,男孩和女孩将自动包含一个构造函数属性,指向他们的构造函数。复制代码如下:报警(男孩。构造函数==person);//真
alert(girl . constructor==Person);//trueprototype Javascript指定每个构造函数都有一个指向另一个对象的prototype属性。构造函数实例将继承此对象的所有属性和方法。
这意味着我们可以直接在原型对象上定义不变的属性和方法。
复制的代码如下:脚本类型=' text/JavaScript '函数人(姓名、年龄){this。name=namethis.age=年龄;}
人。原型。type=' human
person . prototype . eat=function(){ alert('吃米饭');}/脚本
然后,生成实例:
复制的代码如下: Script Type=' text/JavaScript ' var boy=new person('小明',' 12 ');Var girl=新人('小红',' 10 ');
警惕(男孩.类型);//人类男孩. eat();//吃/写剧本
此时所有实例的type属性和eat()方法实际上是同一个内存地址,指向原型对象,从而提高了运行效率。
警惕(男孩.吃==女孩.吃);//true prototype属性是一个内置属性,它指定对象扩展的构造函数。下面的代码向Animal构造函数添加了一个新的属性大小,这是cat对象的原型属性。通过使用prototype属性,扩展Animal构造函数的所有对象都可以访问size属性
猫=新动物(“猫”、“喵”、“走/跑”);cat . prototype . size=' fat ';在这种情况下,所有动物对象的大小属性都是“胖”。默认情况下,原型是对象的新实例。因为它仍然是一个对象,所以可以向该对象添加新的属性。正如样式是javascript的一个对象一样,您可以在样式之后继续添加属性。
复制代码如下: script type=' text/JavaScript '/*定义了Person类的公共属性*/functionperson (_ name,_ age,_ salary) {//person类,定义为:“this。属性名“这个。Name=_ name//Person类的私有属性定义为:“var属性名”var Age=_ agevar薪资=_薪资;
//定义Person类的公共方法(特权方法),定义为:“this。函数名=function(){ 0.}”这个。show=function(){ alert(' age=' age ' t ' ' salary=' salary ');//允许访问公开方法中类的私有属性}/script
在搜索属性时,对象将首先遍历它自己的属性,如果它不存在,它将继续搜索[[原型]]引用的对象。[[原型]]等等,直到[[原型]].[[原型]]未定义(对象
简单地说,对另一个对象的引用是通过对象的[[Prototype]]保存的,属性是通过这个引用向上搜索的,这就是原型链。
全局窗口对象
JavaScript中的任何全局函数或变量都是窗口的属性。Self对象与window对象完全相同,self通常用于确认其处于当前形式。
窗口的主要对象如下:
JavaScript文档对象JavaScript框架对象JavaScript历史对象JavaScript位置对象JavaScript导航器对象JavaScript屏幕对象的几种常用方法
Valueof()方法:返回指定对象的初始值。split()方法将字符串拆分为一个字符串数组并返回该数组。indexOf()方法返回字符串中指定字符串值的第一次出现。substring()方法用于提取字符串中两个指定下标之间的字符。substr()方法从startPos位置开始的字符串中提取指定数量的字符串。join()方法用于将数组中的所有元素放入字符串中。arrayObject.join(分隔符)reverse()方法用于反转数组中元素的顺序。slice()方法可以从现有数组中返回选定的元素。对象文字
对象文字用于创建包含大量属性的过程。
复制的代码如下:脚本类型=' text/JavaScript ' var company={ name : ' Microsoft ',年龄: 39,员工3360 99000,CEO : ' Nadella ' };/script
这里需要注意的是,属性和属性值之间用冒号分隔(:);多个属性用逗号(,)分隔。一个对象的文字量也可以定义一个方法,只需要在对象的属性上写函数,这是一个匿名函数,只需要写它的方法名()就可以调用它。
复制的代码如下:脚本类型=' text/JavaScript ' vardog={ name : ' husky ',age:2,run : function(){ return ' 123 ';} } alert(dog . run());//如果输入dog.run,后面函数部分的代码/脚本会弹出
Javascript数组部分
1.1。数组对象
Array对象:支持创建任何数据类型的数组。
复制代码如下: arrayobj=new array()arrayobj=new array([size])arrayobj=new array([element 0[,element1 [,[,elementn]]])
定义:var arr=[2,3,45,6];Var arr=新数组(2,4,5,7)定义没有任何区别。[]由于代码短而具有高性能。
使用数组和对象文字:varatest=[];创建数组时,使用数组文字是一个不错的选择。同样,对象文字也可以用来节省空间。以下两行相等,但使用对象文字的行较短:
新对象;//尽量不要使用var oTest={ };//最佳选择,或者var 0Test=[];遍历为了获得遍历数组的最佳性能,建议使用经典for循环。
复制代码如下:VarList=[1,2,3,4,5,10000000];for(var i=0,l=list.lengthI l;I){ console . log(list[I]);}
上面的代码有一个处理,即通过l=list.length缓存数组的长度
数组构造器
因为Array的构造函数在如何处理参数方面有些模糊,所以总是建议使用Array -[]-的字面语法来创建数组。
所以下面的代码会很混乱:
新数组(3,4,5);//结果: [3,4,5]新数组(3) //结果: [],这个数组的长度是3,所以尽量避免使用数组构造函数创建新数组。建议使用数组的字面语法。它们更短更简单,从而增加了代码的可读性。
数组数组的属性
数组数组有三个属性:长度属性、原型属性和构造函数属性
1.1 .长度属性
Length属性指示数组的长度,即数组中元素的数量。因为数组的索引总是从0开始,所以数组的上限和下限是0,长度是-1。与大多数其他语言不同,JavaScript数组的长度属性是可变的,需要特别注意。
2 .原型属性
返回对对象类型原型的引用。原型属性是对象共有的。
对于数组数组对象,使用以下示例说明原型属性的用途。向数组对象添加一个方法,该方法返回数组中最大的元素值。为此,声明一个函数,将其添加到Array.prototype中,然后使用它。
复制代码如下:function array _ max () {var I,max=this[0];for(I=1;长度;I){ if(max this[I])max=this[I];}返回最大值;}
array . prototype . max=array _ max;var x=新数组(1,2,3,4,5,6);var y=x . max();
代码执行后,y将最大值保存在数组x或6中。
3 .构造函数属性
表示创建对象的函数。描述:构造函数属性是所有具有原型的对象的成员。它们包括除全局和数学对象之外的所有JScript本机对象。构造函数属性保存对构造特定对象实例的函数的引用。
例如:
复制代码如下:x=新字符串(' Hi ');If(x.constructor==String) //进行处理(条件为真)。//或函数MyFunc{ //函数体。}
y=新的MyFuncIf(y.constructor==MyFunc)//进行处理(条件为真)。对于阵列:
y=新数组();
数组方法:
附上阵列的思维导图: