JavaScript “类”定义 继承 闭包 封装
一、Javascript “类”:
类:在面向对象编程中,类(class)是对象(object)的模板,定义了同一组对象(又称"实例")共有的属性和方法。
Javascript是一种基于对象(object-based)的语言,你遇到的所有东西几乎都是对象。但是,它又不是一种真正的面向对象编程(OOP)语言,因为它的语法中没有class(类)。
但是,我们在javascript中可以模拟出“类” 。 总结的阮一峰的定义类(class)的三种方法
1> 构造函数法
构造函数 模拟"类",在其内部用this关键字指代实例对象。
生成实例的时候,使用new关键字。
类的属性和方法,还可以定义在构造函数的prototype对象之上。
2> Object.create()
Javascript的国际标准ECMAScript第五版(目前通行的是第三版),提出了一个新的方法Object.create()。
用这个方法,"类"就是一个对象,不是函数。
3> 极简主义法
首先,它也是用一个对象模拟"类"。在这个类的内部,定义一个构造函数createNew(),用来生成实例。
然后,在createNew()的内部,定义一个实例对象,把这个实例对象作为返回值。
二、Javascript 继承
在基于类的语言中,对象是类的实例,并且类可以从另一个类继承,如Java;JavaScript则是一门基于原型的语言,以原型链实现继承,其对象可以直接继承自另一对象。
Javascript语言的继承机制。 总结自阮一峰的继承机制的设计思想 构造函数的继承 非构造函数的继承 汤姆大叔 强大的原型和原型链
它没有"子类"和"父类"的概念,也没有"类"(class)和"实例"(instance)的区分,全靠一种很奇特的"原型链"(prototype chain)模式,来实现继承。
JavaScript 不包含传统的类继承模型,而是使用 prototype 原型模型 来 实现继承。
涉及到继承这一块,Javascript 只有一种结构,那就是:对象。
在 javaScript 中,每个对象都有一个指向它的原型(prototype)对象的内部链接。(使用构造函数法模拟类 函数仍是 对象)这个原型对象又有自己的原型,直到某个对象的原型为null
为止(也就是不再有原型指向),组成这条链的最后一环。这种一级一级的链结构就称为原型链(prototype chain)。
原型
Javascript中创建的每个函数都有一个prototype属性,这个属性是一个指针,指向一个对象,这个对象的作用即是包含可以由特定类型实例共享的属性和方法,这个对象就是函数的原型对象。
默认情况,所有的原型对象都会有一个constructor属性,这个属性包含一个指向prototype属性所在函数的指针。
调用构造函数创建一个新实例后,实例的内部将包含一个指向构造函数原型对象的指针,在ECMA-262中定义此指针为[[Prototype]],并不能被显式的访问到,而在Firefox,Safari和Chrome中每个对象上有一个__proto__属性。
__proto__显示的是实例与构造函数原型对象间的关系,而非实例与构造函数间的关系。
继承的实现:
2.1 构造函数的继承
1.构造函数绑定
2.2 非构造函数的继承
三、JavaScript 闭包
闭包是指函数有自由独立的变量。换句话说,定义在闭包中的函数可以“记忆”它创建时候的环境。
闭包允许将函数与其所操作的某些数据(环境)关连起来。
在循环中创建闭包:一个常见错误 未完待续 https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Closures
四、封装
封装
JavaScript “类”定义 继承 闭包 封装的更多相关文章
- JavaScript 类式继承与原型继承
交叉着写Java和Javascript都有2年多了,今天来总结下自己所了解的Javascript类与继承. Javascript本身没有类似Java的面向对象的类与继承术语,但其基于原型对象的思想却可 ...
- javascript类式继承最优版
直接看实例代码: <!doctype html> <html lang="en"> <head> <meta charset=" ...
- js原生设计模式——2面向对象编程之继承—原型继承(类式继承的封装)
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8&qu ...
- 详谈Javascript类与继承
本文将从以下几方面介绍类与继承 类的声明与实例化 如何实现继承 继承的几种方式 类的声明与实例化 类的声明一般有两种方式 //类的声明 var Animal = function () { this. ...
- javascript“类”与继承总结和回顾
Javascipt语法不支持"类"(class)[es6已经支持],但是有模拟类的方法.今天我主要谈谈Javascipt中模拟“类”的方法及js中继承的总结和回顾. js中实现“类 ...
- python 类定义 继承
0 前言 系统:win7 64bit IDE : python(x,y) 2.7.6.1 IDE集成的解释器:Python 2.7.6 (default, Nov 10 2013, 19:24:18) ...
- javascript类式继承模式#4——共享原型
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- javascript类式继承模式#3——借用和设置原型
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- javascript类式继承模式#2——借用构造函数
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
随机推荐
- vultr优惠码ssd vps赠送50美金,长期有效
vultr最新优惠码.vultr vps注册教程,是大家关心的问题.网上流传很多vultr vps优惠码,鱼龙混杂,难以判断.其实,获取vultr优惠赠送美元的方式很简单. 第一种,新用户使用绑定信用 ...
- 查看Oracle正在执行的任务
select a.program, b.spid, c.sql_text,c.SQL_ID from v$session a, v$process b, v$sqlarea c where a.pad ...
- DUIlib使用Fastreport--报表简单使用
fastreport是一个简单优秀的报表,fastreport更多是和delphi联合使用预览和打印数据的.我在开始使用duilib做项目时,打印和数据预览都是自己绘制的,这样不仅绘制麻烦费事费事,而 ...
- Git 的版本库创建和修改
什么是版本库呢?版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改.删除,Git都能跟踪,以便任何时刻都可以追踪历史,或 ...
- Linux lsof命令详解和使用示例【转】
所以如传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字等,系统在后台都为该应用程序分配了一个文件描述符,无论这个文件的本质如何,该文件描述符为应用程序与基础操作系统之间的交互提供了通用接 ...
- Java处理JPEG图片时,需要导入com.sun.image.codec.jpeg.JPEGImageEn,报错处理
Java处理JPEG图片时,需要导入com.sun.image.codec.jpeg.JPEGImageEn,会报错,不能使用相应的方法. 原因:java访问限制级api的时候,默认的eclipse设 ...
- Webdriver其他定位方式
1.下拉框的定位 在遇到select下拉框的选择时,比如: <select id="nr" name="NR"> <option select ...
- drupal 连表查询+分页
$query = db_select('Table','t'); $query->join('Table_A','a','on条件); $query->join('Table_B','b' ...
- ssh无密码登录设置方法以及出现问题 ECDSA host key 和IP地址对应的key不同的解决
最近在做hadoop,因为要求各主机之间的用户必须相同,且为方便远程登录,需配置无密码登录 先附上ssh无密码登录设置方法: 先生成密钥并配置无ssh无密码登录本机,输入命令: ssh-keygen ...
- HDU 5867 Water problem
处理出1-99的,之后的加上多少hundred和and即可.整百和一千的时候注意一下. #pragma comment(linker, "/STACK:1024000000,10240000 ...