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

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

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

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

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% 的时间。

转载于:https://blog.51cto.com/7613577/1561300

js面向对象技术小结相关推荐

  1. 简单粗暴地理解js原型链–js面向对象编程

    简单粗暴地理解js原型链–js面向对象编程 作者:茄果 链接:http://www.cnblogs.com/qieguo/archive/2016/05/03/5451626.html 原型链理解起来 ...

  2. JS面向对象的程序设计之继承-继承的实现-借用构造函数

    JS面向对象的程序设计之继承-继承的实现-借用构造函数 前言:最近在细读Javascript高级程序设计,对于我而言,中文版,书中很多地方翻译的差强人意,所以用自己所理解的,尝试解读下.如有纰漏或错误 ...

  3. ES6学习笔记(三):教你用js面向对象思维来实现 tab栏增删改查功能

    前两篇文章主要介绍了类和对象.类的继承,如果想了解更多理论请查阅<ES6学习笔记(一):轻松搞懂面向对象编程.类和对象>.<ES6学习笔记(二):教你玩转类的继承和类的对象>, ...

  4. JS Binding 技术(1)

    背景 Lynx 作为一个基于 JavaScript 语言(后续简称 JS )的跨平台开发框架,与 JS 的通信是"与生俱来"的,框架和 JS 引擎打交道是必不可少的能力.JS 引擎 ...

  5. ole db提供程序 mysql_服务器_SQLServer的链接服务器技术小结,一、使用 Microsoft OLE DB Provider F - phpStudy...

    SQLServer的链接服务器技术小结 一.使用 Microsoft OLE DB Provider For ODBC 链接MySQL 安装MySQL的ODBC驱动MyODBC 1.为MySQL建立一 ...

  6. 【何不三连】JS面向对象最后一弹-多态篇(羽化升仙)

    前言 你盼世界,我盼望你无bug.Hello 大家好!我是霖呆呆! 首先抱歉让大家久等了,大家一直期待的"多态"篇到现在才来 ????,其实我最近挺忙的,给张手机截图让大家感受一下 ...

  7. UML基础——面向对象技术

    1.面向对象技术的基本原则 .抽象 .封装 .模块性 .层次性 2.面向对象技术的基本概念 对象: --物理实体 --软件实体 --概念实体 1)对象描述一个事物: --状态 --行为 --标识 类: ...

  8. 《C#精彩实例教程》小组阅读12 -- C#面向对象技术高级应用

    本微信图文详细介绍了C#面向对象技术高级应用.

  9. JavaScript – 6.JS面向对象基础(*) + 7.Array对象 + 8.JS中的Dictionary + 9.数组、for及其他...

    6.JS面向对象基础(*) 7.Array对象 7.1 练习:求一个数组中的最大值.定义成函数. 7.2 练习:将一个字符串数组输出为|分割的形式,比如"刘在石|金钟国|李光洙|HAHA|宋 ...

  10. JS面向对象一:MVC的面向对象封装

    JS面向对象一:MVC的面向对象封装 MDNjavascript面向对象 面向对象(Object-Oriented) 面向对象里面向的意思是以...为主,面向对象编程既以对象为主的编程. 面向对象的一 ...

最新文章

  1. mysql proxy性能差_两种MySQL-Proxy架构的测试对比记录
  2. python闭包主要解决什么问题_关于python中闭包的总结
  3. 自定义View实现Canvas炫酷效果
  4. BUUCTF(pwn) ciscn_2019_s_3 [ 栈溢出SROP攻击]
  5. spring mvc学习(13)windows上安装maven
  6. LINQ to JavaScript
  7. JavaScript-方法
  8. 协同进化遗传算法 代码_遗传算法在组卷中的应用
  9. BGP——路由通告+IBGP水平分割机制+RR路由反射器(讲解+配置命令)
  10. acm java 类库_ACM java入门和基本技巧
  11. numpy常用函数总结 | 菜鸟教程
  12. mock模拟接口测试_Python接口测试之mock(上)
  13. 清理tomcat服务器日志文件,Tomcat日志配置与清理
  14. 计算机考研408每日一题 day162
  15. php集成paypal付款流程,PHP整合PayPal支付_PHP教程
  16. 机房服务器维修合同,机房维护合同模板.doc
  17. WinRAR 5.40无弹窗广告注册版下载
  18. TJA1050 引脚
  19. 微信公众帐号开发-自定义菜单的创建及菜单事件响应的实例
  20. 新版个人所得税计算python_2019年新税率工资计算器(python脚本) | linux系统运维...

热门文章

  1. 转载于:http://blog.csdn.net/iorikyo/article/details/1314892
  2. iOS中控制器的实践和学习(3)-简易5图之A2
  3. nginx负载均衡的方法
  4. 105 基于socketserver实现并发的socket编程
  5. 03 爬虫之selenium模块
  6. JavaScript-Tool:CKFinder
  7. javascript---不可靠的“undefined”
  8. URAL 1823. Ideal Gas(数学啊 )
  9. 【Struts1】--beanutils
  10. [翻译]Scott Mitchell的ASP.NET2.0数据教程中文版索引(Canceled!!)