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% 的时间。
转载于:https://blog.51cto.com/7613577/1561300
js面向对象技术小结相关推荐
- 简单粗暴地理解js原型链–js面向对象编程
简单粗暴地理解js原型链–js面向对象编程 作者:茄果 链接:http://www.cnblogs.com/qieguo/archive/2016/05/03/5451626.html 原型链理解起来 ...
- JS面向对象的程序设计之继承-继承的实现-借用构造函数
JS面向对象的程序设计之继承-继承的实现-借用构造函数 前言:最近在细读Javascript高级程序设计,对于我而言,中文版,书中很多地方翻译的差强人意,所以用自己所理解的,尝试解读下.如有纰漏或错误 ...
- ES6学习笔记(三):教你用js面向对象思维来实现 tab栏增删改查功能
前两篇文章主要介绍了类和对象.类的继承,如果想了解更多理论请查阅<ES6学习笔记(一):轻松搞懂面向对象编程.类和对象>.<ES6学习笔记(二):教你玩转类的继承和类的对象>, ...
- JS Binding 技术(1)
背景 Lynx 作为一个基于 JavaScript 语言(后续简称 JS )的跨平台开发框架,与 JS 的通信是"与生俱来"的,框架和 JS 引擎打交道是必不可少的能力.JS 引擎 ...
- ole db提供程序 mysql_服务器_SQLServer的链接服务器技术小结,一、使用 Microsoft OLE DB Provider F - phpStudy...
SQLServer的链接服务器技术小结 一.使用 Microsoft OLE DB Provider For ODBC 链接MySQL 安装MySQL的ODBC驱动MyODBC 1.为MySQL建立一 ...
- 【何不三连】JS面向对象最后一弹-多态篇(羽化升仙)
前言 你盼世界,我盼望你无bug.Hello 大家好!我是霖呆呆! 首先抱歉让大家久等了,大家一直期待的"多态"篇到现在才来 ????,其实我最近挺忙的,给张手机截图让大家感受一下 ...
- UML基础——面向对象技术
1.面向对象技术的基本原则 .抽象 .封装 .模块性 .层次性 2.面向对象技术的基本概念 对象: --物理实体 --软件实体 --概念实体 1)对象描述一个事物: --状态 --行为 --标识 类: ...
- 《C#精彩实例教程》小组阅读12 -- C#面向对象技术高级应用
本微信图文详细介绍了C#面向对象技术高级应用.
- JavaScript – 6.JS面向对象基础(*) + 7.Array对象 + 8.JS中的Dictionary + 9.数组、for及其他...
6.JS面向对象基础(*) 7.Array对象 7.1 练习:求一个数组中的最大值.定义成函数. 7.2 练习:将一个字符串数组输出为|分割的形式,比如"刘在石|金钟国|李光洙|HAHA|宋 ...
- JS面向对象一:MVC的面向对象封装
JS面向对象一:MVC的面向对象封装 MDNjavascript面向对象 面向对象(Object-Oriented) 面向对象里面向的意思是以...为主,面向对象编程既以对象为主的编程. 面向对象的一 ...
最新文章
- mysql proxy性能差_两种MySQL-Proxy架构的测试对比记录
- python闭包主要解决什么问题_关于python中闭包的总结
- 自定义View实现Canvas炫酷效果
- BUUCTF(pwn) ciscn_2019_s_3 [ 栈溢出SROP攻击]
- spring mvc学习(13)windows上安装maven
- LINQ to JavaScript
- JavaScript-方法
- 协同进化遗传算法 代码_遗传算法在组卷中的应用
- BGP——路由通告+IBGP水平分割机制+RR路由反射器(讲解+配置命令)
- acm java 类库_ACM java入门和基本技巧
- numpy常用函数总结 | 菜鸟教程
- mock模拟接口测试_Python接口测试之mock(上)
- 清理tomcat服务器日志文件,Tomcat日志配置与清理
- 计算机考研408每日一题 day162
- php集成paypal付款流程,PHP整合PayPal支付_PHP教程
- 机房服务器维修合同,机房维护合同模板.doc
- WinRAR 5.40无弹窗广告注册版下载
- TJA1050 引脚
- 微信公众帐号开发-自定义菜单的创建及菜单事件响应的实例
- 新版个人所得税计算python_2019年新税率工资计算器(python脚本) | linux系统运维...
热门文章
- 转载于:http://blog.csdn.net/iorikyo/article/details/1314892
- iOS中控制器的实践和学习(3)-简易5图之A2
- nginx负载均衡的方法
- 105 基于socketserver实现并发的socket编程
- 03 爬虫之selenium模块
- JavaScript-Tool:CKFinder
- javascript---不可靠的“undefined”
- URAL 1823. Ideal Gas(数学啊 )
- 【Struts1】--beanutils
- [翻译]Scott Mitchell的ASP.NET2.0数据教程中文版索引(Canceled!!)