类和对象

其他面向对象的语言类的语法是内置的,自然而然的事。javascript中有对象,但没有类的语法,类的实现需要模拟出来。
只需要把对象想成一个容器,里面存放一些属性或方法,把类想象成一个对象的模板,便可以很简单的实现对象和类了。其他语言内置的类可能会有其他特性,但是js这种可以作为最简单的类来看待。
 

js中内置有对象的概念。下面是对象创建的一些方式。

 
对象的创建,下面是直接new Object()创建一个js对象,然后再设置属性和方法。
 var obj = new Object();
obj.a = 1;
obj.func1 = function(){};
js对象的属性不需要定义对象的时候写好,而是可以在任意时候设置,这是它的特点。
这种方式管理不方便,并且不可重用。

另外有两种创建对象的方式

 var obj = {};
function ClassA() {
}

第一种是js的字典,字典本身也是一个js对象。因为动态语言的特性它可以存放各种类型的数据,包括函数指针

 var obj = {
"attr1": 1,
"attr2": [],
"fun1": function(a, b) {
return a + b;
}
};
 
js字典取值的语法可以obj['attr1']或者obj.attr1
设值 obj["attr1"] = 1; obj.attr1 = 2;
所以使用的时候便可以
 var a = obj.attr1;
var b = obj.fun1(1, 6);
obj.attr1 = 9;
var c = obj.attr1;

这样字典对象本身的使用语法跟其他语言类也是相似的。它可以看作一个简单的对象使用。它与第一种方式差不多,是第一种的替代方案。

function的作用

如果要实现复杂类和对象的特性,需要用到function
首先函数本身也是个对象,它有js对象的特性,所以可以给函数设置属性等。并且它可以看成是一个对象的构造函数,并且通过js的特性函数可以模拟成一个类来使用。(它是对象,也是函数,也是对象的构造函数,也可以模拟成类)
 
它本身就是个普通的函数,跟其它语言函数一样
 
function func1(a, b) {
return a + b;
}
func1(1, 2);
它自己也是个对象,可以设置属性等
function A() {
}
A.a = ;
alert(A.a);
它可以做对象的构造器, 使用new关键字
function A() {
}
var obj = new A();
obj.attr = ;

它可是被看成是对象的构造函数

function A(a, b) {
this.a = a;
this.b = b;
}
var obj = new A();
obj.a;

this指向的是当前对象的引用,这个和其他语言类似。上例代码相当于

function A() {
}
var obj = new A();
obj.a = a;
obj.b = b;

(注:这个简单的转换对后续的内容的理解有所帮助)

 
正是因为它有构造对象的能力,并且可以看出是对象的构造函数,所以说它有作为对象模板的功能。一个能定义对象的模板就可以被看成是类了。
下面的一个function可以看成一个类
 function ClassA() {
this.a = 1;
this.b = [];
this.func1 = function() {
return this.a + 100;
};
}

使用的时候使用new关键字,new出一个对象来

 var objA = new ClassA();
var a = objA.a;
var b = objA.func1();
objA.a = 200;

上面定义类的方式可以看成如下

 function ClassA() {
} //js是动态语言,js对象的属性不需要定义对象的时候写好,而是可以在任意时候设置,这是动态语言的特点。
var objA = new ClassA();
objA.a = 1;
objA.b = [];
objA.func1 = function(){return this.a + 100};
字典方式也叫对象字面量,它只能直接创建一个对象出来,没有类的功能。直接需要一个对象的时候可以用这个办法创建。
用function方式能模拟类的功能,并且将属性方法等设置定义在类定义的区域中,一是代码方便管理,二阅读起来也更方便,并且跟其他面向对象语言定义类的写法更相似。

javascript面向对象的写法01的更多相关文章

  1. javascript面向对象的写法03

    javascript面向对象的写法03 js一些基础知识的说明 prototype 首先每个js函数(类)都有一个prototype的属性,函数是类.注意类有prototype,而普通对象没有. js ...

  2. javascript面向对象的写法及jQuery面向对象的写法

    文章由来:jQuery源码学习时的总结 在JS中,一般的面向对象的写法如下: function Cao(){}//定义一个构造函数 Cao.prototype.init = function(){}/ ...

  3. javascript面向对象的写法02

    面向对象特性的初步实现 1.封装 利用作用域封装变量 作用域的概念是一样的,for语句,if语句等这些作用域内定义的变量只能作用域内访问,函数内定义的变量只能函数内访问. function Class ...

  4. Learn JavaScript(面向对象的程序设计01)

    最新更新请访问: http://denghejun.github.io JavaScript与OOP   JavaScript作为web前端一种重要的脚本技术,已被大多开发人员所熟知.compare ...

  5. [js高手之路] javascript面向对象写法与应用

    一.什么是对象? 对象是n个属性和方法组成的集合,如js内置的document, Date, Regexp, Math等等 document就是有很多的属性和方法, 如:getElementById, ...

  6. JavaScript高级:JavaScript面向对象,JavaScript内置对象,JavaScript BOM,JavaScript封装

    知识点梳理 课堂讲义 1.JavaScript面向对象 1.1.面向对象介绍 在 Java 中我们学习过面向对象,核心思想是万物皆对象. 在 JavaScript 中同样也有面向对象.思想类似. 1. ...

  7. 浅谈javascript面向对象

    我们常用的两种编程模式 POP--面向过程编程(Process-oriented programming) 面向过程编程是以功能为中心来进行思考和组织的一种编程方法,它强调的是系统的数据被加工和处理的 ...

  8. Javascript面向对象(封装、继承)

    Javascript 面向对象编程(一):封装 作者:阮一峰 Javascript是一种基于对象(object-based)的语言,你遇到的所有东西几乎都是对象.但是,它又不是一种真正的面向对象编程( ...

  9. javascript面向对象(一):封装

    本文来自阮一峰 学习Javascript,最难的地方是什么? 我觉得,Object(对象)最难.因为Javascript的Object模型很独特,和其他语言都不一样,初学者不容易掌握. 下面就是我的学 ...

随机推荐

  1. class __init__()

    python 先定义函数才能调用 类是客观对象在人脑中的主观映射,生产对象的模板,类相当于盖房的图纸,生产工具的模具 模板 类:属性.方法 __init__() 这个方法一般用于初始化一个类但是 当实 ...

  2. tornado 07 数据库—ORM—SQLAlchemy—查询

    tornado 07 数据库—ORM—SQLAlchemy—查询 引言 #上节课使用query从数据库查询到了结果,但是query返回的对象是直接可用的吗 #在query.py内输入一下内容 from ...

  3. no git binary found in $path(已解决,但是还有疑问)

    跟同行研究个项目代码,他把代码打包发我后,我解压到本地,路径和我本地个人项目路径基本相同, 但是当执行npm install时,就报了 no git binary found in $path ,这个 ...

  4. VBS常用脚本及其解说一览

    取得本机IP strComputer = "." Set objWMIService = GetObject("winmgmts:\\" & strCo ...

  5. (转)Openldap相关精品文章

    1.运维咖啡吧 https://mp.weixin.qq.com/s__biz=MzU5MDY1MzcyOQ==&mid=2247483754&idx=1&sn=9f20d45 ...

  6. java se系列(一)开发前奏

    1. 软硬件知识 电子计算机:俗称电脑,是一种能够按照程序运行,自动.高速处理海量数据的现代化智能电子设备.由硬件和软件所组成,没有安装任何软件的计算机称为裸机 cpu:是一台计算机的运算核心和控制核 ...

  7. scala 列表的子集判断

    val list1=List.range(0,5) val list2=List.range(0,2) val list3=List(0,6) list1.contains(2) list1.cont ...

  8. oracle 基础知识(十三)----执行计划

    一, 执行计划是什么? 一条查询语句在ORACLE中的执行过程或访问路径的描述.即就是对一个查询任务,做出一份怎样去完成任务的详细方案. 二,执行计划的查看 设置autotrace 序号 命令 解释 ...

  9. zabbix 千台服务器自动添加实战

    一,模式   zabbix 的自动添加 主机有梁祝方式: 自动发现-----被动模式 由服务端主动发起,Zabbix Server开启发现进程,定时扫描局域网中IP服务器.设备, 自动注册----主动 ...

  10. 使用jxl读取excel内容,并转换成Json,用于Datagrid

    一.上传excel文件,得到InputStream,由InputStream得到Jxl中的Workbook,取出内容,存到二维数组中. 1.使用 Jquery Uploadify 插件(http:// ...