new Function

ECMAScript 的函数实际上是功能完整的对象
函数也是对象,可以有属性和方法。
Function类表示开发者定义的任何函数。
用Function类直接创建函数的语法如下:
var function_name = new function(arg1,arg2,….,function_body);这些参数必须是字符串。
函数只是一种引用类型。函数名只是指向函数对象的引用值/变量。
所有函数都应看作Function类的实例。

Function 对象的length 属性
函数属于应用类型,所以它们也有属性和方法。
ECMAScript定义的属性length声明了函数期望的参数个数

ECMAScript 闭包
ECMAScript
最易让人误解的一点是,它支持闭包。
闭包,指的是词法表示包括不被计算的变量的函数,也就是说 ,函数可以使用函数之外定义的变量。
var iBaseNum = 10;

function addNum(iNum1, iNum2) {
function doAdd() {
return iNum1 + iNum2 + iBaseNum;
}
return doAdd();
}
**重点内容**doAdd()函数根本不接受参数,它使用的值是从执行环境中获取的。

ECMAScript 面向对象技术
对象的创建和销毁都在JavaScript执行过程中发生。
声明和实例化
对象的创建方式是用关键字new 后面加上实例化类的名字:
var oObject = new Object();
var oStringObject = new String();
在 ECMAScript 中,不能访问对象的物理表示,只能访问对象的引用。每次创建对象,存储在变量中的都是该对象的引用,而不是对象本身。
注意:废除对象的所有引用时要当心。如果一个对象有两个或更多引用,则要正确废除该对象,必须将其所有引用都设置为 null。
晚绑定(late binding)指的是编译器或解释程序在运行前,不知道对象的类型。使用晚绑定,无需检查对象的类型,只需检查对象是否支持属性和方法即可。ECMAScript 中的所有变量都采用晚绑定方法。这样就允许执行大量的对象操作,而无任何惩罚。
在ECMAScript中,所有对象并非同等创建的。一般来说,可以创建并使用的对象有三种:本地对象,内置对象和宿主对象。
本地对象:”独立于宿主环境的ECMAScript实现提供的对象”
内置对象:”为ECMAScript实现提供的,独立于宿主环境的所有对象,在ECMAScript程序开始执行时出现”。
ECMAScript对象作用域
作用域指的是变量的适用范围。
公用,私有和受保护作用域
ECMAScript只有公用作用域,没有静态作用域。
关键字this
它用在对象的方法中,关键字this总是指向调用该方法的对象。
ECMAScript 定义类或对象
ECMAScript拥有很多创建对象或类的方法。
工厂方法:开发者创造了能创建并返回特定类型的对象的工厂函数

function createCar() {
var oTempCar = new Object;
oTempCar.color = “blue”;
oTempCar.doors = 4;
oTempCar.mpg = 25;
oTempCar.showColor = function() {
alert(this.color);
};
return oTempCar;
}
var oCar1 = createCar();
var oCar2 = createCar();

在工厂函数外定义对象的方法
function showColor() {
alert(this.color);
}
function createCar(sColor,iDoors,iMpg) {
var oTempCar = new Object;
oTempCar.color = sColor;
oTempCar.doors = iDoors;
oTempCar.mpg = iMpg;
oTempCar.showColor = showColor;
return oTempCar;
}
var oCar1 = createCar(“red”,4,23);
var oCar2 = createCar(“blue”,3,25);
oCar1.showColor(); //输出 “red”
oCar2.showColor(); //输出 “blue”

构造函数方式
function Car(sColor,iDoors,iMpg) {
this.color = sColor;
this.doors = iDoors;
this.mpg = iMpg;
this.showColor = function() {
alert(this.color);
};
}
var oCar1 = new Car(“red”,4,23);
var oCar2 = new Car(“blue”,3,25);
混合的构造函数/原型方式

即用构造函数定义对象的所有非函数属性,用原型方式定义对象的函数属性(方法)。结果是,所有函数都只创建一次,而每个对象都具有自己的对象属性实例。
function Car(sCo**lor,iDoors,iMpg) {
this.color = sColor;
this.doors = iDoors;
this.mpg = iMpg;
this.drivers = new Array(“Mike”,”John”);
}
Car.prototype.showColor = function() {
alert(this.color);
};
var oCar1 = new Car(“red”,4,23);
var oCar2 = new Car(“blue”,3,25);
oCar1.drivers.push(“Bill”);
alert(oCar1.drivers); //输出 “Mike,John,Bill”
alert(oCar2.drivers); //输出 “Mike,John”
动态原型方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值