面向对象的 JavaScript
面向对象的javascript
一、创建对象
创建对象的几种方式:
var obj = {};
var obj = new Object();
var obj = Object.create(fatherObj);
var Obj = function(a,b){this.a=a;this.b=b;};
Obj_object = new Obj(a,b);
二、通过继承创建对象
var obj = Object.create(fatherObj);
三、使用构造器创建对象
var Obj = function(a,b){this.a=a;this.b=b;};
Obj_object = new Obj(a,b);
四、call、apply调用实现的装饰器模式
可以指定this指向的调用方式
- <!DOCTYPE html>
- <html>
- <head lang="en">
- <meta charset="UTF-8">
- <title>面向对象的 JavaScript</title>
- </head>
- <body>
- <script type="text/javascript">
- /*创建对象方式非常便利,
- * javascript对于声明在内部或者外部的方法没有区别对待*/
- //1.定义对象 var obj = new Object();与下面定义类型方式等同
- var obj_1 = {
- id : "No ID",
- details:null,
- fnInner:function(str){//方法调用模式,this指向方法所在对象
- this.details = (this.id = str +" "+"Function Inner");
- }
- }
- obj_1.fnOuter = function(str){//函数调用模式,this指向调用函数的对象
- this.details = (this.id = str +" "+"Function Outer");
- }
- obj_1.fnInner("obj_1 ID");
- console.log(obj_1.details);
- obj_1.fnOuter("obj_1 ID");
- console.log(obj_1.details);
- //2.使用Object.create()创建对象实现继承
- var obj_2 = Object.create(obj_1);
- //编写obj_2自己的属性
- obj_2.id = "NO ID";
- obj_2.details = null;
- obj_2.func = function(str){
- this.details = (this.id = str +" "+"Function");
- }
- obj_2.func("obj_2 ID");
- console.log(obj_2.details);
- obj_2.fnInner("obj_2 ID");
- console.log(obj_2.details+" inhert obj_1");
- obj_2.fnOuter("obj_2 ID");
- console.log(obj_2.details+" inhert obj_1");
- /*主流语言创建类以及调用类的方式,
- * 在javascript中的实现十分笨拙,牵扯到prototype关键字的使用
- * 更是容易造成混乱*/
- //3.使用构造函数来创建“类”
- var Obj_3 = function (id, details) {
- //初始化属性
- this.id = id;
- this.details = details;
- }
- //显示使用prototype使函数成为该对象的方法
- Obj_3.prototype.funcPrototype = function(str){
- this.details = (this.id = str +" "+"prototype Function");
- }
- //我理解为静态方法不能获取this关键字的引用,本身与类没有任何关系
- //prototype关键字的使用导致对象创建混乱,javascript的编程思路不清晰导致
- //所以采取用大写字母声明的方式来避免
- Obj_3.funcStatic = function(str){
- return str +" "+"static Function";
- }
- var Obj_3_object = new Obj_3("Obj_3 ID Code", "Obj_3 Details");
- Obj_3_object.funcPrototype("Obj_3");
- console.log(Obj_3_object.details);
- console.log(Obj_3.funcStatic("Obj_3"));
- /*对象的call、apply调用*/
- var obj_4 = {
- details:"NOT Null",
- func:function(str){
- return (this.details += str);
- }
- }
- //在函数层级实现装饰器模式
- //关键字this的指向-->call或apply的第一个参数
- obj_4.func.call(obj_1,"obj_1 调用 obj_4 function func");
- console.log(obj_1.details);
- </script>
- </body>
- </html>
面向对象的 JavaScript的更多相关文章
- 前端开发:面向对象与javascript中的面向对象实现(二)构造函数与原型
前端开发:面向对象与javascript中的面向对象实现(二)构造函数与原型 前言(题外话): 有人说拖延症是一个绝症,哎呀治不好了.先不说这是一个每个人都多多少少会有的,也不管它究竟对生活有多么大的 ...
- 前端开发:面向对象与javascript中的面向对象实现(一)
前端开发:面向对象与javascript中的面向对象实现(一) 前言: 人生在世,这找不到对象是万万不行的.咱们生活中,找不到对象要挨骂,代码里也一样.朋友问我说:“嘿,在干嘛呢......”,我:“ ...
- 摘抄--全面理解面向对象的 JavaScript
全面理解面向对象的 JavaScript JavaScript 函数式脚本语言特性以及其看似随意的编写风格,导致长期以来人们对这一门语言的误解,即认为 JavaScript 不是一门面向对象的语言,或 ...
- 面向对象的JavaScript --- 动态类型语言
面向对象的JavaScript --- 动态类型语言 动态类型语言与面向接口编程 JavaScript 没有提供传统面向对象语言中的类式继承,而是通过原型委托的方式来实现对象与对象之间的继承. Jav ...
- 面向对象的JavaScript --- 封装
面向对象的JavaScript --- 封装 封装 封装的目的是将信息隐藏.一般而言,我们讨论的封装是封装数据和封装实现.真正的封装为更广义的封装,不仅包括封装数据和封装实现,还包括封装类型和封装变化 ...
- 面向对象的JavaScript --- 多态
面向对象的JavaScript --- 多态 多态 "多态"一词源于希腊文 polymorphism,拆开来看是poly(复数)+ morph(形态)+ism,从字面上我们可以理解 ...
- 面向对象的JavaScript --- 原型模式和基于原型继承的JavaScript对象系统
面向对象的JavaScript --- 原型模式和基于原型继承的JavaScript对象系统 原型模式和基于原型继承的JavaScript对象系统 在 Brendan Eich 为 JavaScrip ...
- 第1章 面向对象的JavaScript
针对基础知识的每一个小点,我都写了一些小例子,https://github.com/huyanluanyu1989/DesignPatterns.git,便于大家理解,如有疑问,大家可留言给我,最近工 ...
- javascript面向对象之Javascript 继承
转自原文javascript面向对象之Javascript 继承 在JavaScript中实现继承可以有多种方法,下面说两种常见的. 一,call 继承 先定义一个“人”类 //人类 Person=f ...
随机推荐
- 利用js将 json对象在textarea中赋值与展示
明明很简单的东西,可惜网上一大堆废话.在此记录,转需. jsonStr = JSON.stringify(jsondata,); example: <!doctype html> < ...
- win xp32位与64位怎么查看是多少位系统
方法一: Windows XP/Server2003几乎都是32位的操作系统 1. 单击“开始”,然后单击“运行”. 2. 在“打开”框中,键入cmd(再键入systeminfo)或者winmsd.e ...
- DedeTag Engine Create File False提示的种种原因及解决方法
DedeTag Engine Create File False提示的种种原因及解决方法 第一种情况:站点.文件夹权限不足造成无法建立文件 这种情况的出现,一方面可能是Apache设置的读写权限较严格 ...
- Memcached常用命令及使用说明(转)
一.存储命令 存储命令的格式: 1 2 <command name> <key> <flags> <exptime> <bytes> < ...
- 山东省第六届ACM省赛
A.Nias and Tug-of-War(sort排序) B.Lowest Unique Price(set+map) C.Game!(博弈) D.Stars E.BIGZHUGOD and His ...
- POJ 2157 Evacuation Plan [最小费用最大流][消圈算法]
---恢复内容开始--- 题意略. 这题在poj直接求最小费用会超时,但是题意也没说要求最优解. 根据线圈定理,如果一个跑完最费用流的残余网络中存在负权环,那么顺着这个负权环跑流量为1那么会得到更小的 ...
- 在viewPager中的textview参数singleLine和gravity为center冲突bug
在viewPager中有textview. 当textview的参数为singleLine和gravity为center时, onfling事件将会被读取为onclick事件. 这是andriod的一 ...
- JQuery基础教程:选择元素(下)
DOM遍历方法 利用前面介绍的jQuery选择符取得一组元素,就像是我们在DOM树中纵横遍历再经过筛选得到的结果一样.如果只有这一种取得元素的方式,那我们选择的余地从某个角度讲也是很有限的.很多情 ...
- The Ninth Hunan Collegiate Programming Contest (2013) Problem F
Problem F Funny Car Racing There is a funny car racing in a city with n junctions and m directed roa ...
- jQuery Mask
<script type="text/javascript" src="/assets/mask/jquery.mask.min.js"></ ...