1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > js面向对象技术小结

js面向对象技术小结

时间:2023-08-07 11:53:38

相关推荐

js面向对象技术小结

对象是属性的无序集合,每个属性存放一个原始值、对象或函数,严格来说这意味着对象是无特定顺序的值的数组

类:可以看做是对象的配方

程序使用类创建对象时,生成的对象叫做类的实例。

一种面向对象语言需要向开发者提供四种基本能力

1) 封装-把相关的信息(无论数据或方法)存储在对象中的能力

2) 聚集-把一个对象存储在另一个对象内的能力

3) 继承-由另一个类(或多个类)得来类的属性和方法的能力

4) 多态-编写能以多种方法运行的函数或方法的能力

7.如果构造函数无参数,括号不是必须的。

8.每次创建对象,存储在变量中的都是该函数的引用,而不是对象本身

9.把对象的所有引用都设置为null,可以强制性地废除对象。

10.绑定:即把对象的接口与对象实例结合在一起的方法

1) 早绑定:是指在实例化对象之前定义它的属性和方法,这样编译器和解释器能够提前转换机器代 码(ECMAScript不支持早绑定)。

2) 晚绑定:值得是编译器或解释程序在运行前,不知道对象的类型。使用晚绑定,无需检查各对象 的类型,只需检查对象是否支持属性和方法即可。ECMAScript中的所有变量都采用晚绑定方法。这 样就允许执行大量的对象操作,而无任何惩罚。

11.一般来说,可创建并使用的对象有三种:本地对象、内置对象和宿主对象

1) 本地对象:独立于宿主环境的ECMASCript实现提供的对象。简而言之,本地对象就是ECMA-262定 义的类(引用类型)。他们包括:

2) 内置对象:由ECMAScript实现提供的、独立于宿主环境的所有对象,在ECMAScript程序开始执行 时出现。这意味着开发者不必明确实例化内置对象,它已被实例化了。有两个内置对象:Global和 Math(他们也是本地对象,根据定义每个内置对象都是本地对象)

3) 宿主对象:所有非本地对象都是宿主对象。所有的BOM和DOM对象都是宿主对象。

12.关键字this:this总是指向调用该方法的对象

使用this的原因是:实例化对象时,总不能确定开发者会使用什么样的变量名。使用this即可在任 何多个地方重用一个函数。eg:

functionshowColor() {

alert(this.color);

};

var oCar1= new Object;

oCar1.color= "red";

oCar1.showColor= showColor;

var oCar2= new Object;

oCar2.color= "blue";

oCar2.showColor= showColor;

oCar1.showColor(); //输出 "red"

oCar2.showColor(); //输出"blue"

注释:在上面的代码中,首先用 this 定义函数 showColor(),然后创建两个对象(oCar1 和oCar2),一个对象的 color 属性被设置为 "red",另一个对象的 color 属性被设置为 "blue"。 两个对象都被赋予了属性 showColor,指向原始的 showColor () 函数(注意这里不存在命名问 题,因为一个是全局函数,而另一个是对象的属性)。调用每个对象的 showColor(),oCar1 输出 是 "red",而 oCar2 的输出是 "blue"。这是因为调用 oCar1.showColor() 时,函数中的 this 关 键字等于 oCar1。调用 oCar2.showColor() 时,函数中的 this 关键字等于 oCar2。

12.字符串连接:ECMAScript 的字符串是不可变的,即它们的值不能改变。请考虑下面的代码:

var str ="hello ";

str += "world";

实际上,这段代码在幕后执行的步骤如下:

1)创建存储 "hello " 的字符串。

2)创建存储 "world" 的字符串。

3)创建存储连接结果的字符串。

4)把 str 的当前内容复制到结果中。

5)把 "world" 复制到结果中。

6)更新 str,使它指向结果。

每次完成字符串连接都会执行步骤 2 到 6,使得这种操作非常消耗资源。如果重复这一过程几百次,甚至几千次,就会造成性能问题。解决方法是用 Array 对象存储字符串,然后用 join() 方法(参数是空字符串)创建最后的字符串。想象用下面的代码代替前面的代码:

var arr =new Array();

arr[0] ="hello ";

arr[1] ="world";

var str =arr.join("");

这样,无论数组中引入多少字符串都不成问题,因为只在调用 join() 方法时才会发生连接操作。此时,执行的步骤如下:

创建存储结果的字符串

把每个字符串复制到结果中的合适位置

虽然这种解决方案很好,但还有更好的方法。问题是,这段代码不能确切反映出它的意图。要使它更容易理解,可以用 StringBuffer 类打包该功能:

functionStringBuffer () {

this._strings_ = new Array();

}

StringBuffer.prototype.append= function(str) {

this._strings_.push(str);

};

StringBuffer.prototype.toString= function() {

return this._strings_.join("");

};

这段代码首先要注意的是 strings 属性,本意是私有属性。它只有两个方法,即 append() 和 toString() 方法。append() 方法有一个参数,它把该参数附加到字符串数组中,toString() 方法调用数组的 join 方法,返回真正连接成的字符串。要用 StringBuffer 对象连接一组字符串,可以用下面的代码:

varbuffer = new StringBuffer ();

buffer.append("hello");

buffer.append("world");

varresult = buffer.toString();

可用下面的代码测试StringBuffer 对象和传统的字符串连接方法的性能:

var d1 =new Date();

var str ="";

for (vari=0; i < 10000; i++) {

str += "text";

}

var d2 =new Date();

document.write("Concatenationwith plus: "

+ (d2.getTime() - d1.getTime()) + "milliseconds");

varbuffer = new StringBuffer();

d1 = newDate();

for (vari=0; i < 10000; i++) {

buffer.append("text");

}

varresult = buffer.toString();

d2 = newDate();

document.write("<br/>Concatenation with StringBuffer: "

+ (d2.getTime() - d1.getTime()) + "milliseconds");

这段代码对字符串连接进行两个测试,第一个使用加号,第二个使用 StringBuffer 类。每个操作都连接 10000 个字符串。日期值 d1 和 d2 用于判断完成操作需要的时间。请注意,创建 Date 对象时,如果没有参数,赋予对象的是当前的日期和时间。要计算连接操作历经多少时间,把日期的毫秒表示(用 getTime() 方法的返回值)相减即可。这是衡量 JavaScript 性能的常见方法。该测试的结果应该说明使用 StringBuffer 类比使用加号节省了 50% - 66% 的时间。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。