当前位置:首页 » 前端 » 本页

javascript基础知识 In 前端  @2013-01-26 2,281 Vs

javascript基础知识

第一章,简介

一.javascript实现

核心:ECMAScript

文档对象模型:DOM

浏览器对象模型:BOM

1.ECMAScript:语法、类型、语句、关键字、保留字、操作符、对象

2.DOM:document object model.是针对xml但经过扩展用于html的应用程序编程接口(apiapplication programming interface,dom把整个页面映射成一个多层节点结构。

支持可访问和操作浏览器窗口的浏览器对象模型(browser object model,是提供浏览器交互方法和接口。

 

第二章,HTML中使用Javascript

1.标签的位置

按照惯例<script>放在<header>标签的内部,但是为是使页面内容优先呈现推荐放在</body>标签之前,使页面代码优先加载htmlcss

例如写法

<script type=”text/javascript” scr=”example1.js”></script>

2.在使用兼容性的xhtml中直接写在页面的代码可为

 

<script type=”text/javascript”>

//<![cdata[

function compare(a, b){

if ( a < b){

alert("a is less than b");

}else if(a > b){

alert("a is greater than b");

}else{

alert("a is equal to b");

}

}

//]]>

</script>

 

3.使用<noscript>元素可以指定在不支持脚本的浏览器中显示代替内容。但在启用了脚本的情况下,浏览器不会显示<noscript>元素中的任何元素

 

第三章

 

1.语法:借鉴了大量了的c与其它类似c语言的编程语法

2.区分大小写

3.标识符,所谓的标符指变量的名字、函数、属性或者函数的参数

1)第一个字符必须是一个字母、下划线、或一个美元符号

2)其它字符可以是字母、下划线、美元符号和数字

4.注释

 

//单行注释

/*

*这是一个多行注释

*(块级注释)

*/

5.关键字与保留字

以下是全部关键字

break else new var

case finally return void

cath for switch while

continue function thi swith

default if throw delete

in intry do

do instance of typeof

 

以下是全部保留字

abstract enumint short

boolean export interface static

byteex tends long super

char final native synchronized

class float package throw

const goto private transient

debugger implement protecte dvolatile

double import public

 

6.变量

全局变量与局部变量,var与没有关键字var的区别

 

7.数据类型,有种基本数据类型

undefined–如果这个值未定义

null–空对象指针

boolean–truefalse

number–数值类型nan是一个特殊的数值

string–字符串类型用双引号(“)或单引号(‘)表示

 

8.另外还有一个复杂的数据类型object

是一对象,是一组数据和功能的集合,对象可以通过一个new操作符来创建要创建要创建的对象类型。而创建的object类型的实例并为其添加属性或方法,就可以创建自定义对象

9.object的每一个实例都具有以下属性和方法

1)constructor:保存着用于创建当前对象的函数。对于前面的例子而言,构造函数(constructor)就是object

2)hasownproperty(propertyname):用于检查给定属性在当前对象实例中(不是实例原型中)是否存在。其中,作为参数的属性名(propertyname)必须以字符串的形式指定(例如,o.hasownproperty(“name”)

3)isprototypeof(object):用于检查传入的对象是否是另外一个对象的原型

4)propertyisenumerable(propertyname):用于检查给定的属性能否使用for-in语句,其用法与hasownprooerty()方法是一样,作为参数的属性必须以字符串形式指定

5)tostring():返回字符串的对象表示

6)valueof:返回对象的字符串、数值或布尔值表示,通常是与tostring()返回的值相同

 

10.操作符

包括算术操作符(加号或减号)、位操作符、关系操作符和相等操作符,相应的操作符通常都会调用对象的valueof()tostring()方法,以取得可以操作的值

1)一元操作符

2)布尔操作符,一共有三个(具体细看p39

逻辑非(not

逻辑与(&&)同真为真,同假为假,其它情况为假

逻辑或(||)同假情况才为假,其它情况都为真

3)乘性操作符(具体细看p41

乘法(*

除法(/

求模(%)即余数

4)加性操作符

加法(+

减法(—)

5)关系操作符

小于(<

大于(>

小于等于(<=

大于等于(>=

6)相等操作符

相等(==)和不相等(!=

全等(===)与不全等(!==

7)条件操作符

variable = boolean_expression ? true_value : false_value;

本质上是基于对bollean_expression的求值的结果,决定给变量variable赋什么值。如果求值结果为true则给变量variable赋予true_value的值,如果求值结果为false,则给变量variable赋予false_value的值

var max = (num1 > num2) ? num1 : num2 ;

8)赋值操作符

/赋值(*=

/赋值(/=

/赋值(%=

/赋值(+=

/赋值(—=

左移/赋值(<<=

有符号右移/赋值(>>=

无符号右移/赋值(*=

9)逗号操作符,使用逗号操作符可以在一条语句中执行多个操作

var num1 = 1 , var num2 = 2 , var num3 = 3 ;

在用于赋值的时候,逗号操作符一般是返回操作符中的最后一个例如,

var num = (4 , 5 , 6 , 0 ); // num的值为0

 

11.语句

1)if 语句

if  (condition)  statement1  else  statement2  condition:条件,statement1语句1

var  i = 24 ;

if (i > 25){

alert( ”greater than 25″);

}else{

alert(“less than or equal 25″);

}

2)do-while语句,是一种后测试循环语句,即在循环中的代码执行后才会测试出口条件,换句话说就是在对条件表达试求值式之前循环体内的代码至少被执行一次。

do {

statement

}while (expression);

 

var i = 0 ;

do {

i +=2;

}while (i < 10);

 

alert (i);

3)while 语句

while (expression) statement

while 语句属于前测试语句与do-while相反

var i = 0;

while (i < 10){

i +=2;

}

\alert (i) ;

4)for 语句,是一种前测试循环语句,但它具有在执行循环之前初始化变量和定义循环后要执行的代码的以能力。(pg49)

for (initialization ; expression; post-loop-expression) statement

var count = 10;

for (var i = 0; i < count; i++){

alert(i);

}

5)for-in语句,是一种精准的迭代语句,可以用来枚举对象的属性。 

for (property in expression) statement

示例:

for (var propName in window){

document.write(propName);

document.write(“<br/>”);

}

6)label语句,使用label语句可以在代码中添加标签,以便将来使用

label: statement

示例:

start: for ( var i = 0; i < count; i++){

alert(i);

}

7)breakcontinue语句,用于在循环中精确地控制代码执行。其中,break语句会立即退出循环,强制执行循环后面的语句。而continue语句别然也是立即退出循环,但退出循环后会从循环的顶部继续执行。

8)with语句,将代码的作用域设置到一个特定的对象中。

with (expression) statement

定义with语句的目的是为了简化多次编写同一个对象的工作,如下面的例子所示。

var qs = location.search.substring(1);

var hostName = location.hostname;

var url = location.href;

以上代码都包含了location的对象,如果用with来改写可以如下

with (location){

var qs = search.substring(1);

var hostName = hostname;

var url = href;

}

大量使用with语句会导致性能的下降,同时也会给代码调试带来麻烦,所以不建议使用with语句。

9)switch语句

if语句关系最为密切,语法如下

switch (expression){

case value: statement

break;

case value: statement

break;

case value: statement

break;

case value: statement

break;

default: statement

}

在每一种情况下(case)中,如果表达式等于这个值(value),则执行后面的语句(statement)。而break关键字会导致代码执行流跳出switch语句,如果省略关键字会导致执行完当前case后直接跳到下一个case中去执行。最后的default关键字则用于在表达式中不匹配前面任何一种情形下的时候,执行机动代码(因此也相当于一个else语句,也是为了避免开发人员多次写if语句时的else语句

12.函数

 

函数使用function关键字来声明,语法

function functionName(arg0, arg1, arg2, arg3,……,argN){

statement

}

以下是一个示例函数

function sayHi( name, message){

alert(“Hello ” + name + ”,” + message);

}

这个函数通过其函数名来调用,后面还要加上一对圆括号和参数(圆括号中的参数如果有多个,可以用括号隔开),调用sayHi()函数的代码如下

sayHi(“Nicholas”, ”How are you the day?”);

ECMAScript中函数定义时不必指定是否返回值。实际上任何函数在任何时候都可以通过return语句后跟要返回的值来实现返回。

function sun (num1, num2){

return num1 + num2;

}

在下面这个函数中return永远不会被执行

function sun (num1, num2){

return num1 + num2;

alert (“Hello World !”); //永远不会被执行

}

另外return也可以不带任何的返回值,函数停止执行后会立即将返回undefinded值,这样的做法一般是需要提前停止函数执行又不需要返回值的情况下,比如在下面的例子中就不会出现弹出框

function sayHi( name, message){

return ;

alert(“Hello ” + name + ”,” + message);//永远不会被执行

 

}

1)理解参数

ECMAScript接收的参数是不介意是任何类型的参数,也不会介意是多少个参数。甚至是可以不传递参数。在ECMAScript内部中是以数组的方式来表示,函数接收的始终是这个数组而不会去考虑里面是什么。实际上在函数体内可以通过arguments对象来访问这个函数数组。

2)没有重载

ECMAScript中定义了两个相同的名字的函数,则该名字只属于后定义的函数。

 

 

第四章,变量、作用域、和内存问题

 

1、基本类型和引用类型的值

基本类型:保存在栈内存中的简单数据段,这种值是完全保存在内存中的一个位置。

引用类型:保存在堆内存中的对象,变量中实际保存的是一个指针,这个指针指向内存是的另一个位置,该位置保存对象。

对于保存基本类型的变量,它们按值访问,我们操作的是它的实际值。

对于保存引用类型的变量,通过查询的方式,把它叫做按引用访问。

2、传递参数

在向参数传递基本类型的值时,被传递的值会被复制一个局部变量(即命名参数,或者说就是arguments的对象中的一个元素)。在向参数传递引用类型的值时,会把这个值在内存中的地址复制给一个局部变量,因此这个局部变量的变化会反映在函数的外部。

3、检测类型

在检测基本类型时使用typeof,但在检测引用类型时用处不是很大。这时就要用instanceof

例如

alert (person instanceof object);

根据规定,所有引用类型值都是Object的实例。因此在检测一个引用类型和Object构造函数时,Instanceof返回的都是true。如果使用Instanceof检测基本类型的话,则返回的都是false,因为基本类型不是对象

 

第五章,引用类型

引用类型的值(对象)是引用类型的一个实例,在ECMAScript是一种数据结构,用于将数据和功能组织在一起,也常被称为类。引用类型也常被称为对象定义。

1、Object类型,大多数引用类型值都是object类型的实例,也是ECMAScript中例使用最多的一种。

2、Array类型(重点p77),除Object类型外,ArrayECMAScript中最常用的了。

a、转换方法,toLocaleString()toString()valueof(y)方法。

b、栈方法,栈是一种LIFOlast-in-first-out后进先出)的数据结构。也就是最先添加的项最早被移除。而改动的部分只为栈的顶部。push()pop()方法。

push()方法可以接收任意数量的参数,把它们逐个添加到数组的未尾去,并返回修正后的数组长度。

pop()方法则从数组末尾移除最后一项。减少数组的length值。然后返回移除的项。

var colors = new Array ();

var count = colors.push(“red” , ”green”); //推入两个项

alert (count); //2

 

count = colors.push(“black”); //推入一个项

alert (count); //3

 

var item = colors.pop(); //取得最后一项

alert (item); //”black”

alert (colors.length); //2

c、队列方法,该方法是在末端添加项,从列表前端移除项。由于push()是向数组末端添加项的方法,因此要模拟队列只需一个从数组前端取得项的方法。实现这一操作的方法就是shift(),它能移除数组中的第一个项并返回该项, 同时长度减1.

Unshift()方法,故名思义,unshift ()shift()用法相反。

d、重排序方法,数组中已经存在两个可以直接用来重排序的方法。reverse()sort()

var values = {12345};

value.reverse( );

alert (values); //54321

在默认情况下,sort ( )方法是按照升序排列数组,即最小位于最前面,最大的排在最后面,为了实现排序sort ( )方法会调用每个数组项目的toString()转型方法,然后比较得到的字符串。

var values = {0151015};

value.sort( );

alert (values); //0110155

此时是根据前面的第一位数值比较,15中的第一位1显然小于5(解决方法p81

e、操作方法

ECMAScript中为操作已经包含在数组中的项提供了很多方法。

concat ( )方法可以基于当前数组中所创建的一个新数组。

slice ( )它能够基于当前数组中的一个或多个项目创建一个新数组。slice ( )方法可以接受一个或两个参数,即返回项目的起始项目和结束项目位置。slice ( )方法不会影响原始数组。

splice ( )方法,算是最强大的数组方法了,主要用途是向数组中部插入项。有如下3种方法

 

删除:可以删除任意数量的项。只需指定2个参数,要删除的第一项位置和要删除项的项数。例如,splice (0,2)会删除数组的前两项。

插入:可以指定位置插入任意数量的项,只需提供3个参数:起始位置、0(要删除的项数)和要插入的项。例如,splice (2,1,”red”,”green” )会从当前数组的位置2开始插入字符串“red”“green”

替换:可以指定位置插入任意数量的项,且同时删除任意数量的项。只需指定3个参数;起始位置、要删除的项和要插入的任意数量项,插入的项数不必与删除的项数相同。  例如,splice ( 2,1,”red”,”green”)会删除当前数组位置2的一项,然后从当前位置2开始插入字符串“red”“green”

 

splice ( )方法始终会返回一个数组,该数组中包含从原始数组中删除的项(如果没有删除任何项则返回一个空数组)

var colors = {“red”,”green”,”blue”};

var removed = colors.splice(0,1); //删除第一项

alert (colors);//green,blue

alert (removed);//red,返回的数组中只包含一个项

 

removed  = colors.splice(1,0,”yellow”,”orange”);//从位置1开始插入两项

alert (colors);//green,yellow,orange,blue

alert (removed);//返回的是一个空数组

 

removed = colors.splice(1,1,”red”,”purple”);//插入两项,删除一项

alert (colors);//green,red, purple,orange,blue

alert (remove);//yellow,返回的数组中只包含一项

3、Date类型197011日午夜开始经过毫秒数来保存数组,Date保存的日期可以精确到197011日午夜之前或之后的285 616

Date.parse ()方法接收一个表示日期的字符串参数,然后尝试根据这个字符串参数返回相应的日期的毫秒数

var someDate = new Date (“May 25, 2004″);

Date.UTC( )方法同样是返回表示日期的毫秒数,但它与Date.parse( )构建值时使用不同的信息。Date.UTC( )的参数分别是年份、基于0的月份、(一月是0,二月是1)、月中的哪一天(131)、小时数(023)、分钟、秒、毫秒。在这些参数中只有前两个是必须的。

 

a、继承方法,与其它类型一样,Date也重写了toLoacleString( )toString( )valueOf( )方法,但这些方法返回值与其它类型中的方法不一样(p84

b、日期格式化方式

toDateString( )-以特定于实现的格式显示星期几、月、日和年

toTimeString( )-以特定于实现的格式显示时、分、秒和时区

toLocaleDateString( )-以特定于地区的格式显示星期几、月、日和年

toLocaleTimeString( )-以特定于实现的格式显示时、分、秒

toUTCString( )-以特定于实现的格式完整的UTC日期

c、日期/时间组件方法(p86,一大串)

 

4、Regexp类型,通过上类型来支持正则表达式。

正则表达式的匹配模式(pattern)支持下列3个标志(flags

g—-表示全局(global)模式,即该模式应用于所有字符串

i—-表示不区分大小写(case-insensitive)模式,即在确定匹配项时忽略模式与字符串的大小写

M—-表示多行(multiline)模式,即在到之一行文未尾时,还会继续查找下一行中是否存在与模式匹配的项。

var pattern1 = /at/g;//匹配字符串中所有“at”实例

var pattern2 = /[bc]at/i;//匹配第一个“bat”“cat”,不区分大小写

var pattern1 = /.at/gi;//匹配所有以“.at”结尾的3个字符的且合,不区分大小写

a、RegExp实例属性(p89

global-布尔值,表示是否设置了g标志

ignororeCase-布尔值,表示是否设置了i标志

lastIndex-整数,表示开始搜索下一个匹配项的字符,从0算起

multiline-布尔值,表示是否设置了g标志

source-正则表达式的字符串表示,按照字面量形式而非传入构造函数中的字符串模式返回。

bRegExp实例方法

RegExp对象的主要方法是exec( ),是专门为捕获组而设计的

cRegExp构造函数属性

d、模式的局限性

 

5、Function类型

每一个函数都是Function类型的实例,而且与其它引用类型一样也是具有属性和方法的。由于函数是对象,因此函数名实际上也是一个指向函数对象的指针,不会与某个函数绑定。

a、没的重载(深入理解),两个同名函数,后面的函数会覆盖前面的函数。

b、函数声明与函数表达式

c、作为值的函数

d、函数内部属性,有两个特殊的对象,argumentsthis.arguments的主要用途是保存函数的参数,这个对象还有一个叫callee的属性,该属性是一个指针,指向拥有arguments的属性的函数。

注意:函数名字只是一个包含指针的变量而已,因此在不同环境中执行时,全局的函数sayColor( )o.sayColor( )指向的还是同一个函数

e、函数属性和方法,每个函数都包含两个属性,lengthprototype

length 表示函数希望接收的命名参数的个数(没有命名的函数length0

prototype是保存它们所有实例方法的真正所在,换句话说,诸如toString( )valueof( )等方法都是保存在prototype名下,只不过是通过各自己的实例访问。

而每一个函数都包含两个非继承过来的方法,apply( )call( ),这两个方法的用途都是在特定的作用域中调用函数,实际上等于设置函数体内的this对象的值。

apply( )方法接受两个参数,一个是其中运行函数的作用域,另一个是参数数组,第二个也可以是array的实例。

call( )方法apply()方法相同,只是接收参数的方式不同(p98

 

6、基本包装类型,为了便用操作基本类型值。ECMAScript还提供了3个特殊的引用类型

BooleanNumberString

a、Boolean类型,推荐不要使用Boolean对象

b、Number类型,除了继承的方法外,Number还提供了一些用于将数值格式化的字符串的方法。toFixed( )方法会按照指定的小数位返回数值的字符串表示

var num = 10 ;

alert ( num.toFixed(2));//”10.00″

如果实际的小数比指定的小数位数还我多,则接近最大小数位置的值会四舍五入。

var num = 10.005;

alert ( num.toFixed(2));//”10.01″

toExponential( )方法,该方法返回的是指数表示法(用e表示)

var num = 10;

alert (num.toExponential(1));//”1.0e+1″

如果想得到表示某个数值的最合适的数值时可以使用toPrecision()方法

var num = 99;

alert ( num.toExponential(1));//”le+2″

alert ( num.toExponential(2));//”99″

alert ( num.toExponential(3));//”99.0″

cString类型

两个用于访问特定字符的方法是:charAt( )charCodeAt,两个方法都接收一个参数,即基于0的字符位置

var stringValue = ”Hello world”;

alert (stringValue.charAt(1));//”e”用于字符

alert (stringValue.charCodeAt(1));//”101″用于字符编码

字符串的操作方法

concat( ),用于将一个或多个字符串拼接起来,但在字践中更多使用“+”符号来操作

slice( )substr( )subString( )。这三个方法都会返回返回被操作字符串的一个子字符,而且也都接受一个或两个参数,第一个参数指定子字符串的开始位置,第二个参数(在指定的情况下)表示子字符串在哪里结束。

字符串位置方法

indexOf()lastIndexOf()方法都是从一个字符串中搜索给定的子字符串,然后返回字符串的位置(如果没有找到该子字符串,则返回-1;这两个方法区别在于前者从开头开始搜索字符串,而后者是从后面开始搜索字符串。

字符串大小写转换方法

toLowerCase()toUpperCase()以及地区性的toLocaleLowerCase()toLocaleUpperCase()

字符串的模式匹配方法

match()本质上与调用RegExpexec()方法相同,match()只接受一个参数要么是一个正则表达式要么是一个RegExp对象

localeCompare()方法

这个方法比较两个字符串,并返回下列值中的一个

如果字符串在字母表中应该排在字符串参数之前,则返回一个负数(大多情况是-1

如果字符串等于字符串参数,则返回0

如果字符串在字母表中应该排在字符串参数之后,则返回一个正数(大多情况是1

fromCharCode()方法 

接收一个或多个字符编码,然后将它们转换成一个字符串

HTML方法 早期

 

7、内置对象

1Global(全局)对象

aeval( )方法,是整个ECMAScript中最强大的一个方法。就像一个完整的ECMAScript解析器,它只接受一个参数,即要执行的字符串

eval(“alert( ’hi’ )”);

这行代码等同于

alert (“hi”);

再举个例子

var msg = ”Hello world”;

eval(“alert(msg)”);//”hello world”

bGlobal对象的属性(p111

cwindow对象

Web浏览器都是将这个全局对象(global)作为window对象的一部分加以实现

2)Math对象

为保存数学公式提供了一个公共位置即Math对象

a、Math对象属性(p112

b、min()max()方法,用来确定一组数中的最小值与大值

var max = Math.max(2543216);

alert (max);//54

c、舍入方法

Math.ceil()执行向上舍入,即它总是将数值向上舍入最为接近的整数;

Math.floor()执行向下舍入,即它总是将数值向下舍入最为接近的整数;

Math.round()执行标准舍入,即它总是将数值四舍五入为最接近的整数;

drandom()方法

Math.random()方法返回介于0-1这间的一个随机数,不包括01

e、其它方法(p113

 

第六章,面向对象的程序设计(概念性Important!)

面向对象(object-oriented,OO)的语言有一个标志,那就是它们都有类的概念,而通过类可以创建多个具有相同属性和方法的对象

1、创建对象,创建自定义对象最简单的方法就是创建一个Object的实例。

1)工厂模式

2)构造模式

a、将构造函数当作函数

b、构造函数的问题,使用构造函数的主要问题是,每个方法都要在每个实例中创建一遍。

3)原型模式

定义:我们每创建一个函数都有一个prototype(原型)属性,这个属性是一个指针,指向一个对象,而这个对象的用途是包含可以由特定类型的所有实例共享的属性和方法。

a、理解原型对象(p119

b、原型与in操作符,有两种方式使用in操作符,单独使用和在for-in循环中使用。在单独使用时,in操作符会在通过对象能够访问给定属性返回true,无论该属性存在于实例中还是原型中

c、更简单的原型语法

Function Person{

}

 

Person.prototype = {

name : ”Nicholas”,

age : 29,

job : ”Software Engineer”,

sayName : function(){

alert (this.name);

}

};

d、原型的动态性

概念:由于原型中查找值的过程是一次搜索,因此我们对原型对象所做的任何修改都能够立即从实例上反映出来,即使是先创建了实例后修改原型也如此。

var Person = new Person ();

Person.prototype.sayHi = function (){

alert ( ”hi”)

};

person.sayHi ( );//”hi”(没有问题)

 

e、原生对象的原型(不推荐在产品化的程序中修改原生对象的原型)

f、原型对象的问题,首先它省略了构造函数传递初始化参数这一环节,结果所有实例在默认的情况下都将取得相同的属性值。而原型对象是大的问题是由其共享的本性所致。

4)组合使用构造函数模式和原型模式

创建自定义的类型的最常见方式,就是组合使用构造函数模式与原型模式。

5)动态原型模式

使用动态原型模式时,不能使用对象字面量重写原型,如果在已经创建了实例性况下重写原型,那么就会切数断现在实例与新原型之间的联系。

6)寄生(Parasitic)构造函数模式

这种模式的基本思想是创建一个函数,该函数的作用仅仅是封装创建对象代码,然后再返回新创建的对象;

function Person(name, age, job){

var o = new object( );

o.name = name;

o.age = age;

o.job = job;

o.sayName = function (){

alert (this.name);

};

return o;

}

 

var person = new Person(“Nicholas”, 29, ”Software Engineer”);

person.sayName();//”Nicholas”

 

7)稳妥构造函数模式

所谓稳妥对象就是没有公共属性,而且其方法不引用this的对象。

 

2、继承

实现继承的方法主要是依靠原型链来实现的

1)原型链,其基本的思想是利用原型让一个引用类型继承另一个引用类型的属性和方法

2)借用构造函数,这种技术的思想是在子类型构造函数的内部调用超类型构造函数。

3)组合继承,也叫做伪经典继承,揸的是将原型链和借用构造函数的技术组合到一块,从而发挥二者之长。其背后的思路是使用原型链实现对原型属性和方法的继承。

function SuperType(name){

this.name = name;

this.colors = ["red", "blue", "green"];

}

 

SuperType.prototype.sayName = function( ){

alert (this.name);

};

 

function SubType(name, age){

//继承属性

SubType.call(this.name);

This.age = age;

}

 

//继承方法

SubType.prototype = new SuperType( );

SubType.prototype.sayAge = function( ){

alert(this.age);

};

 

var instance1 = new SubType(“Nicholas”, 29);

instance1.colors.push(“black”);

alert(instance1.colors);//”red,blue,green,black”

instance1.sayName( );//”Nicolas”;

instance1.sayAge( );//29

 

var instance2 new SubType(“Greg”,27);

alert (instance2.colors);//”red,blue,green”

instance2.sayName( );//”Greg”

instance2.sayAge( );//27

 

 

4)原型式继承

5)寄生式继承

6)寄生组合式继承

 

……

第七章…



打签» , ,   评论» 抢沙发

↓↓↓ 支持我们 ↓↓↓



我说两句 »

Ctrl+Enter

注意: 评论者允许使用'@user空格'的方式将自己的评论通知另外评论者。例如, ABC是本文的评论者之一,则使用'@ABC '(不包括单引号)将会自动将您的评论发送给ABC。使用'@all ',将会将评论发送给之前所有其它评论者。请务必注意user必须和评论者名相匹配(大小写一致)。

搜索

返回顶部