01 JavaScript语言进阶-高级特性

JavaScript高级特性

一,函数

1,Argument对象
<1>JavaScript特性

在JavaScript中存在函数的重载,当定义多个同名函数时,计算机只会编译运行最后一个函数。
在JavaScript中函数定义没有任何参数,调用该函数时,可以传递任意参数。

<2>Argument对象作用
1,Argument对象是数组对象
2,Argument对象的length属性:获取函数实参的个数
3,Argument对象特性是实现重载效果
eg:
function add(){
if(argument.length == 2){
return argument[0] + argument[1];
}else if(argument.length == 3){
        return argument[0] + argument[1]+argument[0];
}
}

alert(add(1,2)); 输出:3
alert(add(1,2,3)); 输出:6
2,变量作用域
<1>JavaScript特性
1,一次性定义代码中所有变量
2,全局变量与局部变量同名时,在函数域中只能访问局部变量
3,在定义局部变量时,需要使用var
<2>函数作用域
1,作用域:全局域、函数域
2,变量:
		(1)全局变量:全局域 + 函数域
		(2)局部变量:当前函数域
3,特殊函数
<1>函数三种定义方式
1,function 函数名(){}
2,var 函数名 = function(参数){}
3,var 函数名 = new Function(参数,函数体);
<2>匿名函数
1,定义:没有名的函数被称为匿名函数。
2,格式:var 对象名 = function() {}
3,作用:
		(1)将匿名函数作为参数,传递给另一个函数。
		(2)使匿名函数完成一次性任务。
eg:	
var one = function(){return 1;}
var two = function(){return 2;}
function fn(a , b){
return a()+b();
}
输出:3
<3>回调函数

定义:

1>将一个函数作为参数传递另一个函数,被当做参数的函数称为回调函数。
2>将一个匿名函数作为参数传递另一个函数,被当做参数的函数称为匿名回调函数。
eg:
function fn(a , b){
return a()+b();
}
alert(function(){return 1;},function(){return 2;}); 
<4>自调用函数
(function 函数名(){
方法体;
}	
)();

第一个小括号:封装函数
第二个小括号:调用函数

二,闭包

<1>作用域链:变量的作用域具有传递传递性

<2>定义:函数可以使用函数之外定义的变量

<3>功能:
(1)降低代码之间的耦合度
(2)局部变量的共享
(3)提高安全性
eg:
var a = "a";
var n;	//只定义,不初始化,为全局变量 
function fn(){
var b = "b";
n = function(){
var c = "c";
alert(a);
alert(b);
alert(c);
}
n();
}
fn();
alert(a);
n();

三,对象

1,定义对象方式
<1> var 对象名 = new Object();
<2> var 对象名 = {key:value1,key:value2}
<3> 函数对象:function 对象名(){}
2,对象属性和方法

普通对象

<1>调用:

(1)对象名.属性名
(2)对象名.方法名

<2>修改:

(1)对象名.属性名 = 新属性
(2)对象名.方法名 = 新方法

<3>增加:

(1)对象名.新属性名 = 新属性
(2)对象名.新方法名 = 新方法

<4>删除:

(1)delete 对象名.属性名
(2)delete 对象名.方法名

函数对象

调用:

var 对象名 = new 函数对象();

其他方式同上

函数对象与函数区别:使用this,指代当前函数对象名,其中this作用替代上下文环境。

四,原型(prototype)

函数本身是一个对象,原型就是函数对象的一个属性。

1,功能作用

利用原型为函数对象和内建函数添加属性和方法。

2,要点解析

在创建了函数对象时,原型自动创建。

3,调用原型

格式:

函数对象.prototype
4,原型应用

在创建构造函数时,可以将对象共有属性和方法,统一添加到构造函数的原型对象中,这样的做法可以避免大量的全局声明污染到全局作用域。

eg:
function Hero(){}	//定义函数对象
Hero.prototype = {
name:"zhangsanfeng",
mySayMe:function(){
alert("this is a hero!")
}
}
var hero = new Hero();	//创建对象

五,继承

示例:

//定义A构造函数
function Animal(){
this.species = "动物";
}
//定义B构造函数
function Cat(){
this.name = name;
this.color =  coler;
}

1,构造函数绑定

语法功能:

使用call或者apply方法,将父对象的构造函数绑定在子对象上。
eg:
function Cat(name,color){
Animal.apply(this,arguments);
this.name = name;
this.color = color;
}
var catone = new Cat("大旺""黄色");
alert(catone.species);	//output:动物
在这里插入代码片
2,prototype模式

语法功能:

使用prototype属性,让B函数的原型对象指向A函数的实例,则B函数的原型对象继承了A函数
Cat.prototype = new Animal();
Cat.prototype.construetor = Cat;
var catone = new Cat("大旺","黄色");
alert(catone.species);output:动物

其中construetor是prototype对象的属性,作用是指向它的构造函数,这里需要重定向构造函数指向Cat函数。

3,直接继承prototype

语法作用:

把不变的属性值直接写在A函数原型上中,再将B函数的原型对象指向A函数原型对象完成继承。
eg:
function Animal(){}
Animal.prototype.species = "动物";

Cat.prototype = Animal.prototype;
Cat.prototype.construetor = Cat;

var Catone = new Cat("大旺","黄毛");
alert(catone.species);	output:动物

4,空对象中介

语法作用:

创建第三方空对象,将空对象原型指向A函数原型,再将B函数原型指向空对象实例完成继承。
eg:
var f = function(){};
f.prototype = Animal.prototype;
Cat.prototype = new f();
Cat.prototype.construetor = Cat;
5,拷贝继承
eg:
function extendCopy(){
var z = {};
for(var i in p){
z[i] = p [i];
}
z.uber = p;
retuen z;
}
var a = {name:"a"}
var b = extendCopy(a);
b.tostr = function(){return this.name;}
alert(b.tostr());
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值