`
shuxiang
  • 浏览: 26919 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
社区版块
存档分类
最新评论

JS读书笔记(一)面向对象

阅读更多

面向对象

 面向对象的三大特点:封装、继承、多态

 

javascript语言本身拥有对象,实现了对属性,方法的封装(也只是封装了一半,并没有实现对属性和方法的访问控制),却并没有实现继承和多态,但却利用语言的其他特性实现(具体哪些特性,有待研究)了(曲线救国)了继承和多态。所以个人认为javascript”算是“面向象对象语言(重点于写代码的人有没有面向对象的思想)。

 

  1. 利用javascript函数的”闭包“特征,可以实现”封装“特点——对属性的公有和私有控制
     
    function List(){
      //利用闭包实现私有属性
      var m_elements = [];
      
      m_elements = Array.apply(m_elements, arguments);
      //公有属性  
      this.length = {
    	  valueOf:function(){
    		    return m_elements.length;
          },
          toString:function(){
    			return m_elements.length;
    	  }
      }
      //公有方法  
      this.toString = function(){
        return m_elements.toString();
      }
      
      this.add = function(){
         
    	 m_elements.push.apply(m_elements,arguments);  
      }
    }
    
    var alist = new List(1,2,3);
    alert(alist); //相当于 alist.toString();
    alert(alist.length)//相当于 alist.length.toString();
     

在javascript里,对象的属性和方法支持4种不同的的类型:

  • 私有属性
  • 动态公有属性
  • 静态公有属性(原型属性)
  • 类属性

 

function myClass(){
  //私有变量
  var p = 100;
  //动态公有变量
  this.x = 10;
}
//静态公有变量(原型属性),一旦改动,将影响所有对象,所有对象都可以访问
myClass.prototype.y = 20;
//类变量
myClass.z = 30;

var a = new myClass();

a.p // undefined   因为是私有变量所以该问不到
a.x = 20; // 改变动态公有变量
a.y = 40; // 给单个实例a添加动态公有变量,与原型属性重复时,将覆盖原型属性
delete(a.x); //删除动态公有变量x
delete(a.y); //删除动态公有变量y
a.x // undefined a没了,自然没法访问
a.y // 20 原型属性又还原了,哈哈
myClass.z //30,没啥好说的
 

 

 

 

匿名函数最有趣的用途是用来创建闭包。闭包(closure)是一个受到保护的变量空间,由内嵌函数生成。Javascript具有函数级的作用域。这意味着定义在函数内部的变量在函数外部不能被访问。Javascript的作用域又是词法性质(lexicallly scoped)。这意味着函数运行在定义它的作用域中,而不是在调用它的作用域中。把两个因素结合起来,就能通过把变量包裹在匿名函数中而对其加以保护。

                                                                                                                                 ---《javascript设计模式》

 

对象的易变性:可以动态的修改类或对象。

对象的内省性:即反射机制(reflection)。

JS在模仿传统的面向对象特性的技术都依赖于对象的易变性和反射机制。

对象易变性的缺点:随时都可以修改一个类或对象,这使得一个对象/类的特征不稳定,进行类型检查很困难,所以这是JS缺少类型检查的原因之一。

 

继承:JS的继承是基于对象的(原型式)继承,它可以用来模仿基于类(类式)继承。这两种继承方式的性能也会不同,根据手头任务的实际情况,有时其中的某种会更适合一些。

 

分享到:
评论

相关推荐

    Javascript 面向对象编程(一) 封装

    《面向对象的Javascript》(Object-Oriented JavaScript) 《Javascript高级程序设计(第二版)》(Professional JavaScript for Web Developers, 2nd Edition) 它们都是非常优秀的Javascript读物,推荐阅读。 笔记...

    Javascript 面向对象 (声明篇)

    由于 Javascript 面向对象机制及其的重要,而且内容非常的繁多,在这里就分篇章逐个介绍。 使用对象首先就是声明它(内置的对象当然就不需要了)。该死的 Javascript 总是会让我们死去很多的脑细胞,这篇文章主要...

    基于SpringBoot+Vue+Mysql的学生读书笔记系统(源码+论文)

    本论文主要论述了如何使用JAVA语言开发一个读书笔记共享平台 ,本系统将严格按照软件开发流程进行各个阶段的工作,采用B/S架构,面向对象编程思想进行项目开发。在引言中,作者将论述读书笔记共享平台的当前背景以及...

    毕业设计,基于SpringBoot+Vue+MySql开发的学生读书笔记共享网站,内含完整源代码,数据库脚本,论文视频,视频教程

    本论文主要论述了如何使用JAVA语言开发一个读书笔记共享平台 ,本系统将严格按照软件开发流程进行各个阶段的工作,采用B/S架构,面向对象编程思想进行项目开发。在引言中,作者将论述读书笔记共享平台的当前背景以及...

    ExtJS4中文教程2 开发笔记 chm

    Javascript 面向对象之非构造函数的继承 JavaScript对象与继承教程之内置对象(下) JavaScript对象及继承教程(上) javascript正则表达式(一) javascript正则表达式(二) JavaScript的10种跨域共享方法 JavaScript...

    JavaScript高级程序设计 阅读笔记(十四) js继承机制的实现

    继承是面向对象语言的必备特征,即一个类能够重用另一个类的方法和属性。在JavaScript中继承方式的实现方式主要有以下五种:对象冒充、call()、apply()、原型链、混合方式

    菜鸟吧 Web学习完全手册 网页设计工具大全

    JavaScript面向对象编程 菜鸟的Ajax笔记 菜鸟的jQuery笔记 JavaScript实例 经典论坛JavaScript学习总结 菜鸟的Python笔记 《High Performance Web Sites》读书笔记 单片机笔记 C51笔记 51单片机实验 51...

    《JavaScript函数式编程》读后感

    在自己学习的过程中一直听到身边的人说面向过程编程和面向对象编程,而函数式就非常少。为了自己不要落后于其他同学的脚步,故想以写笔记的方式去分享和记录自己阅读中所汲取的知识。 js 和函数式编程 书中用了一句...

    reading-notes

    面向对象的编程,HTML表 8。 布局 9。 表单和JS事件 10。 错误处理与调试 11。 音频,视频,图像 12 Chart.js,画布 13 本地存储,cookie和会话 14a。 变形,过渡,动画 14b。 Google从建立完美团队的探索...

    asp.net知识库

    Essential .NET 读书笔记 [第一部分] NET FrameWork的Collections支持 .NET的反射在软件设计上的应用 关于跨程序集的反射 实现C#和VB.net之间的相互转换 深入剖析ASP.NET组件设计]一书第三章关于ASP.NET运行原理讲述...

    dbcoin-react-frontend:响应式动态网站,使用React JS,Spring框架和高级Oracle PLSQL动态查询,面向对象的功能等,从数据库中分析和获取数据统计信息,该数据库包含来自美国证券交易委员会文件的信息以及其2012-2016年的股价

    请阅读这篇文章: CoreUI是一个开源Bootstrap管理模板。 但是CoreUI不仅仅是另一个管理模板。 得益于透明的代码和文件结构,它远远超越了迄今为止的管理模板。 如果这还不够,我们只需添加一下CoreUI就可以了,它...

    POO-Basico-Platzi:t Platzi OOP课程中的笔记和练习的发展:green_heart:

    Platzi面向对象编程课程 为什么要学习面向对象的编程? 因为它允许更快的编程,所以这是由于对所执行的操作进行了事先分析。 知道如何分析问题和理解面向对象的编程可以前进并停止成为初级程序员。 这是因为招聘...

    Reading-Notes-201

    代码201阅读笔记标题关联Class01- HTML和JavaScript入门Class02- HTML文本,CSS简介和基本JavaScript指令Class03- HTML列表,带有JS的控制流和CSS Box模型Class04- HTML链接,JS函数和CSS布局简介Class05-图片,颜色...

    learning-notes:关于我学到的东西的笔记

    面向对象的设计 避免胖子上课 组成重于继承 SOLID原则 参考架构 清洁建筑 分层架构 微服务 按功能或组件包装 可视化架构 C4模型 视觉依赖性分析工具 数据 CAP定理 数据架构迁移 SQL,NoSQL,NewSQL SQL 酸性质 ...

    my_demos:深入前端核心理论,记录个人博客

    撰写不易,望多多包涵,多多 star,转载请说明markdown 暂不支持新标签打开,为了更好阅读体验请右键“新标签页”打开《JavaScript 高级程序设计(第三版)》学习笔记:第 5 章:引用类型第 6 章:面向对象的程序...

    动弹一下-crx插件

    语言:中文 (简体) 开源中国的动弹啦~ ...- 最新动弹- 热门动弹- 我的动弹- 动弹一下其他的功能,在我发现 tweet 完全没有好友概念之后,...- 熟练了 javascript 面向对象的编程方法- 设计也不容易啊,不能光可以用就行。

Global site tag (gtag.js) - Google Analytics