面向对象的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的更多相关文章

  1. 前端开发:面向对象与javascript中的面向对象实现(二)构造函数与原型

    前端开发:面向对象与javascript中的面向对象实现(二)构造函数与原型 前言(题外话): 有人说拖延症是一个绝症,哎呀治不好了.先不说这是一个每个人都多多少少会有的,也不管它究竟对生活有多么大的 ...

  2. 前端开发:面向对象与javascript中的面向对象实现(一)

    前端开发:面向对象与javascript中的面向对象实现(一) 前言: 人生在世,这找不到对象是万万不行的.咱们生活中,找不到对象要挨骂,代码里也一样.朋友问我说:“嘿,在干嘛呢......”,我:“ ...

  3. 摘抄--全面理解面向对象的 JavaScript

    全面理解面向对象的 JavaScript JavaScript 函数式脚本语言特性以及其看似随意的编写风格,导致长期以来人们对这一门语言的误解,即认为 JavaScript 不是一门面向对象的语言,或 ...

  4. 面向对象的JavaScript --- 动态类型语言

    面向对象的JavaScript --- 动态类型语言 动态类型语言与面向接口编程 JavaScript 没有提供传统面向对象语言中的类式继承,而是通过原型委托的方式来实现对象与对象之间的继承. Jav ...

  5. 面向对象的JavaScript --- 封装

    面向对象的JavaScript --- 封装 封装 封装的目的是将信息隐藏.一般而言,我们讨论的封装是封装数据和封装实现.真正的封装为更广义的封装,不仅包括封装数据和封装实现,还包括封装类型和封装变化 ...

  6. 面向对象的JavaScript --- 多态

    面向对象的JavaScript --- 多态 多态 "多态"一词源于希腊文 polymorphism,拆开来看是poly(复数)+ morph(形态)+ism,从字面上我们可以理解 ...

  7. 面向对象的JavaScript --- 原型模式和基于原型继承的JavaScript对象系统

    面向对象的JavaScript --- 原型模式和基于原型继承的JavaScript对象系统 原型模式和基于原型继承的JavaScript对象系统 在 Brendan Eich 为 JavaScrip ...

  8. 第1章 面向对象的JavaScript

    针对基础知识的每一个小点,我都写了一些小例子,https://github.com/huyanluanyu1989/DesignPatterns.git,便于大家理解,如有疑问,大家可留言给我,最近工 ...

  9. javascript面向对象之Javascript 继承

    转自原文javascript面向对象之Javascript 继承 在JavaScript中实现继承可以有多种方法,下面说两种常见的. 一,call 继承 先定义一个“人”类 //人类 Person=f ...

随机推荐

  1. Entity Framework6 访问MySQL

    先用PM命令安装EF6,MySQL提供的EF实现新增.删除.修改是采用存储过程实现的 Install-Package EntityFramework 配置修改如下 <?xml version=& ...

  2. C#委托多播、Lambda表达、多线程、任务

    class Program { static void Main(string[] args) { Action<double> ops = MathOperations.Mutiply; ...

  3. Redis链接上不的问题

    问题描述: 同样配置的redis及系统环境,在两台服务器(A.B两台服务)上部署,但是其中一台(A),运行一段时间,就链接不上了,从开始运行redis到redis链接不上,这个时间间隔,不一定有时候是 ...

  4. spi驱动无法建立spidev问题

    参考这里: http://e2e.ti.com/support/arm/sitara_arm/f/791/t/168122.aspx http://communistcode.co.uk/blog/b ...

  5. Package 'DXCore for Visual Studio' has failed to load properly

    Since installing 13.1  I get Package 'DXCore for Visual Studio' has failed to load properly error wh ...

  6. 11-UIView与核心动画对比

    *:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...

  7. Integer cache

    View.findViewById采用深度遍历,找到第一个匹配的控件 Integer Cache public static void testIntegerCache() { Class cache ...

  8. 将tomcat设为开机自动启动

    参考网址:http://jingyan.baidu.com/article/a65957f4b12b8724e77f9b5a.html 方法一 1.Tomcat的使用之前必须得Jre,至于是怎么装的, ...

  9. CCJ PRML Study Note - Chapter 1.6 : Information Theory

    Chapter 1.6 : Information Theory     Chapter 1.6 : Information Theory Christopher M. Bishop, PRML, C ...

  10. Laxcus大数据管理系统2.0(13)- 总结

    总结 以上从多个角度阐述了Laxcus主要组成部分和应用情况.所有设计都是基于现实环境下的评估.对比.测试和考量.设计的基本思路很明确,就是将各项功能分解.细化.归类,形成一个个可以独立.小的模块,每 ...