2019独角兽企业重金招聘Python工程师标准>>>

javascript学习之对象基础

面向对象语言

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

  1. 封装:把相关信息(数据和方法)存储在对象中的能力。
  2. 聚集:把一个对象存储在另外一个对象内的能力。
  3. 继承:由另外一个类或者多个类来得到类的属性和方法的能力。
  4. 多态:编写能够以多种方式运行的函数或者方法的能力。

对象的构成

在ECMAScript中,对象由特性attribute构成的,特性可以是原始值,也可以是引用值。

如果特性存在的是函数,它将被看作对象的方法method,否则该特性被看作属性property。

对象应用

声明和实例化

对象是用关键字new后面跟着要实例化的类的名字创建的:

var object = new Object();

PS:创建了Object类的一个实例,并把这个实例存储在变量object中。

如果构造函数没有参数,括号则不是必须的

var object = new Object;

对象引用

在ECMAScript中,不能访问对象的物理表示,只能访问对象的引用,所以每次创建对象,存储在变量中的都是该对象的引用,而不是对象本身。

对象废除

由于ECMAScript是无用存储单元收集程序,意味着不必专门消耗对象来释放内存。当再没有对对象的引用时候,称为该对象被废除dereference了。

方式:把对象的所有引用都设置成null,可以强制性的废除对象。

var object = new Object;
// do something with the object here
object = null;

PS: 废除对象的所有引用的时候需要小心,如果一个对象有两个或者更多的引用,则要正确的废除该对象,必须将其所有引用都设置成null.

早绑定和晚绑定

所谓绑定binding,即把对象的接口与对象实例结合在一起的方法。

早绑定 early binding 指的是实例化对象之前定义他的特性和方法,这样编译器或者解释程序就能提前转换机器语言。像java这样的语言就是早绑定。而ECMAScript不是强类型语言,所以不支持早绑定。

晚绑定 late binding 使用晚绑定,无需检查对象的类型,只需要检查对象是否支持特性和方法即可。ECMAScript中的所有变量都是采用晚绑定方法。

对象类型

本地对象

所谓本地对象native object:独立于宿主环境的ECMAScript实现提供的对象。

Object/Function/Array/String/Boolean/Number/Date/RegExp/Error/EvalError/RangeError/ReferenceError/SyntaxError/TypeError/UrlError

内置对象

所谓内置对象built-in object ,由ECMAScript实现提供的,独立于宿主环境的所有变量,在ECMAScript程序开始执行时出现。

Global对象

Global对象是ECMAScript中最特别的对象,因为实际上它根本不存在。

这里需要理解的是:在ECMAScript中,不存在独立的函数,所有函数都必须是某个对象的方法。

所以像isNaN(),isFinite(),parseInt(),parseFloat()方法都是Global对象的方法。

小结Global对象的方法:

encodeURI()/encodeURIComponent()/decodeURI()/decodeURIComponent()/eval()/isNaN()/isFinite()/parseInt()/parseFloat()

Math对象

Math对象提供了很多方法用于计算。这里先略了。有机会详细的拉出一节来总结。

宿主对象

所有非本地对象都是宿主对象host object,所有DOM和BOM都是宿主对象。

作用域

公用、受保护和私有作用域

对于公用和受保护,私有作用域对于ECMAScript都是没有意义的,因为在ECMAScript中只存在一种作用域-公用作用域。在ECMAScript中所有对象的所有属性和方法都是公用的。

网上人的建议对象私有作用域使用下划线来定义:

obj._color = 'red';

静态作用域并非静态的

在java中类是可以拥有静态属性和方法的,无需在实例化该类的对象,既可以访问这些属性和方法。

严格的来说,ECMAScript中是没有静态作用域的,不过可以给构造函数提供属性和方法

PS:构造函数只是函数,函数是对象,对象可以拥有属性和方法的。

关键字this

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

定义类和方法

使用预定义对象的能力只是面向对象语言的能力的一部分,它真正强大之处在于能够创建自己专用的类和对象。

工厂方式

/** 工厂方式* */
function createCar(color, size, mpg) {var oTempCar = {};oTempCar.color = color;oTempCar.size = size;oTempCar.mpg = mpg;oTempCar.getColor = function () {console.log(this.color);}return oTempCar;
}var oCar1 = createCar('red', 21, 33);
var oCar2 = createCar('blue', 11, 44);
oCar1.getColor();
oCar2.getColor();

构造函数方式

/** 构造函数方式* */
function Car(color, size, mpg) {this.color = color;this.size = size;this.mpg = mpg;this.getColor = function () {console.log(this.color);}
}var oCar3 = new Car('green', 33, 22);
var oCar4 = new Car('white', 44, 66);
oCar3.getColor();
oCar4.getColor();

原型方式

/** 原型方式* */function newCar() {}newCar.prototype.color = 'orange';
newCar.prototype.size = 22;
newCar.prototype.mpg = 32;
newCar.prototype.getColor = function () {console.log(this.color);
}var oCar5 = new newCar();
oCar5.getColor();
console.log(oCar5 instanceof newCar);

混合的构造函数/原型方式

/** 混合的构造函数/原型方式** 用构造函数定义对象的所有非函数属性。* 用原型方式定义对象的函数属性(方法)* */function newCar2(color, size, mpg) {this.color = color;this.size = size;this.mpg = mpg;
}newCar2.prototype.getColor = function () {console.log(this.color);
}var oCar6 = new newCar2('black', 22, 99);
oCar6.getColor();

动态原型方式

略,不建议使用

混合工厂方式

略,不建议使用

修改对象

对于属性prototype,每个构造函数都有prototype属性,可以用于定于方法。

创建新的方法

使用prototype属性为任何已有的类定义新的方法。

/*
输出十六进制的字符串
*/String.prototype.toHexString = function(){return this.toString(16);
}

重定义已有方法

使用属性prototype同样可以覆盖已有的方法。

Function.prototype.toString = function(){return 'Function code hidden';
}

转载于:https://my.oschina.net/bosscheng/blog/159957

javascript学习之对象基础相关推荐

  1. JavaScript学习笔记——对象知识点

    javascript对象的遍历.内存分布和封装特性 一.javascript对象遍历 1.javascript属性访问 对象.属性 对象[属性] //字符串格式 //javascript属性的访问方法 ...

  2. Javascript学习总结 - JS基础系列 二

    简述 本系列将持续更新Javascript基础部分的知识,谁都想掌握高端大气的技术,但是我觉得没有一个扎实的基础,我认为一切高阶技术对我来讲都是过眼云烟,要成为一名及格的前端工程师,必须把基础打扎实了 ...

  3. 1. JavaScript学习笔记——JS基础

    1. JavaScript基础 1.1 语法 严格区分大小写 标识符,第一个字符可以是 $,建议使用小驼峰法, 保留字.关键字.true.false.null不能作为标识符 JavaScript是用U ...

  4. Javascript学习总结 - JS基础系列三

    简述 本系列将持续更新Javascript基础部分的知识,谁都想掌握高端大气的技术,但是我觉得没有一个扎实的基础,我认为一切高阶技术对我来讲都是过眼云烟,要成为一名及格的前端工程师,必须把基础打扎实了 ...

  5. JavaScript学习之对象

    将自定义对象和用内置对象初始化一个变量,使变量成为对象实践了一下: 不懂将代码表框,只好这么写... 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD  ...

  6. 廖雪峰JavaScript学习笔记(基础及数据类型、变量)

    先睹为快 alert('我要学JavaScript!'); Run: 基本语法: 1.每个语句以;结束,不强制 2.语句块用{...} 3.//单行注释,/*...*/ 多行注释 数据类型: 1.不区 ...

  7. javascript学习----window对象的学习与总结

    一   BOM:浏览器对象模型,提供了很多对象,用于对浏览器的功能进行访问,浏览器本身自己就有一些对象,不需要创建. BOM的核心对象是window,它是浏览器的一个实例. 二.(1)Window:的 ...

  8. JavaScript学习笔记——JS基础0

    JavaScript的起源: JavaScript诞生于1995年,它的出现主要是用于处理网页中的前端验证.所谓的前端验证,就是指检查用户输入的内容是否符合一定的规则.比如:用户名的长度,密码的长度, ...

  9. JavaScript学习笔记——对象和数组(上)

    /** 对象:其实就是一种类型,即引用类型.以下学习的是Object类型,Array类型,以及其方法.* 对象的值就是引用类型的一个实例.如:水果作为一个对象,香蕉就是水果对象中的一个实例.男生是一个 ...

最新文章

  1. RapidFramework使用Oracle的步骤
  2. java使用原始套接字技术进行数据包截获_Linux零拷贝技术,看完这篇文章就懂了...
  3. 【Windows 逆向】CheatEngine 工具 ( CheatEngine 简介 | 使用 Lazarus 编译 CE 源码 | CheatEngine 相关文档资料 )
  4. 【不采用】人工智能如何帮助银行反欺诈
  5. Visual Translation Embedding Network for Visual Relation Detection论文中的术语以及对论文的理解笔记...
  6. sql_1-2_get基于盲注
  7. docker-compose 使用小例
  8. 波卡生态HydraDX将于2月8日通过Balancer发售5亿枚代币
  9. Java-斗地主小游戏洗牌发牌(控制台程序)
  10. Delphi7调用百度API
  11. 【个人笔记】图解深度学习
  12. UE4 C++无法打开包括文件 C1083
  13. 应聘引擎程序需做哪些准备
  14. HtmlParser初步研究
  15. 网站灰色代码|哀悼日专用
  16. 傻子都能看懂的 财务报表入门
  17. 【C++】DFS——计算土地上水洼的数量
  18. android 记录触屏坐标,android 屏幕坐标总结
  19. 论文阅读笔记- Dremel
  20. 服务器raid1怎么重装系统,win7 raid1重装系统图文教程

热门文章

  1. java aqua和metal_Java工具集介绍9_16
  2. java返回datatable_(转)在JAVA实现DataTable对象(三)——DataTable对象实现
  3. 面向对象方法的优势简化软件开发的过程_Java面试题说一说你的对面向过程和面向对象的理解...
  4. oracle下的inventory文件夹,oracle INVENTORY 详解
  5. Spark基础学习笔记23:DataFrame与Dataset
  6. 无心剑中译丁尼生《乞丐少女》
  7. 【codevs1021】玛丽卡,以前屯着的最短路
  8. 【codevs1074】食物链
  9. 2017.3.15 余数之和sum 失败总结
  10. mysql 状态机_动画状态机(2)