知识大全 Javascript面向对象编程

Posted 类型

篇首语:宁给穷人一斗,不给富人一口。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Javascript面向对象编程相关的知识,希望对你有一定的参考价值。

Javascript面向对象编程  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  Javascript是一门很灵活的语言 允许我们模拟面向对象编程中的很多机机制 在JS中充分使用面向对象设计思想 可以极大限度的提升代码重用 降低模块间的偶合 更好的逻辑分层与并行开发 下面分几个步骤简单谈下我的理解

  数据类型与包装类

  包装类……类型名……常见值……分类

  Number …… number …………基本数据类型

  Boolean …… Boolean …… truefalse ……基本数据类型

  String …… string …… “hello world!” ……基本数据类型

  Object …… object …… [] ……复合数据类型

  Function …… function …… function() ……特殊类型

  无…… undefined …… undefined 未定义  ……小数据类型

  无…… null …… null ……小数据类型

           内置类型与本文关系不大 不列出

  引用类型与值类型

  引用类型 object function

  值类型 numberbooleanstringnullundefined

  三 new function(构造器)与prototype(原型)

  关于prototype的设计模式就不多说了 网上很多介绍 以一个例子介绍一下js中使用new构造对象的过程

  function classname()this id= ;   var v=new classname();

  当使用function构造对象时 进行以下流程

   查找classname的prototype 并进行浅拷贝

    绑定this指针到拷贝来的对象

    将this constructor属性设置为classname

  [注 其实classname prototype constructor的值也被设置为classname 第六部分会说明]

    执行用户中的代码

    返回this指针赋予左值v

  实现面向对象的三个基本特征

   封装

  封装这个大家都明白 在js中 重点在于访问权限 在其他原生支持面向对象语言中 一般支持public protected private三个关键字来控制访问权限 但在js中 我们只能依靠复杂的作用域关系来控制

  function classname(a)

  var uid=a; //uin为模拟private 作用域为 外部无法使用

  this getuid=function()return a; //为uid提供一个外部只读接口 obj getuid();

  this setuid=function(val)a=val //为uid提供一个外部可写接口obj setuid( );

  this id=uid; //id为模拟public   obj id 使用

  

  classname prototype func=function(); //模拟public方法 obj func()调用

  classname stafunc=function(); //模拟静态方法 classname stafunc()调用

  var obj=new classname( );

  [!]非常需要注意的就是 因为function是引用类型 classname prototype func是所有对象共享的一个function对象(每个对象仅存著引用) 因此对象规模不大 而使用this getuid和this setuid为定义一个function 因此每个对象实例都会存一份 如果放肆使用这种方法 会造成对象规模庞大 影响性能 个人认为模拟private变量的意义不大

  [!]如果有需求真的需要大量使用this xxx=function()这种情况 在function()中的this指针与最外的this指针是不同的 最好在类定义的首行加上var _this=this; 这样在this xxx=function()中也可以方便使用绑定的指针

   继承

  继承的实现 主要有 种方法 第一种是使用javascript本身的原型模型 通过给prototype赋值并改变其constructor属性来实现继承 第二种方法是不使用prototype 手动实现将父对象的所有属性方法深拷贝到子对象 比如A需要继承B 第一种写法可以 A prototype=new B();A prototype constructor=A; 第二种写法可以写一个递归 或者使用jquery中的方法extend 另外 如果要实现多继承的话 prototype就真的好麻烦了(需要依次多个类 还要建空对象来接) 第二种方法就比较简单 依次拷贝即可 一般这种继承为了找父类方便 可以在对象中加个属性 引用父类

   多态

  函数重载就不说了 都会 检查参数即可 很灵活 隐藏属性就是直接赋值undefined 需要注意的是 如果是打算继承B类的prototype 一定要建一个空对象来接 否则的话 你给类写方法的话 相当于直接修改了prototype 就算不写方法 你最后修改constructor时也会造成继承链错乱 接个空对象很容易

  function temp();

  temp prototype=B;

  var obj=new temp();

  这样再让需要继承B prototype的类继承obj即可 即便修改prototype也不会影响到B 而且也不像继承new B()那样浪费很多空间

  深拷贝与浅拷贝

  这个和其他语言中没什么区别 浅拷贝就是直接拷贝 遇到引用类型或类类型不再深入 深拷贝则是根据类型判断 进行递归拷贝

  六 prototype constructor

  这个值主要是用于维护继承的原型链 一篇文章已经写的非常详细 请参考

  七 JS的面向对象开发

我开发过的 B/S 常用两种架构 一种是以 CGI为主 由后台语言去生成 HTMLJS仅仅做一些用户交互 ajax通信等 另外一种是使用 MVC 后台语言仅仅生成 JSONView层完全由 JS组件在客户端实现 后者一般大量使用面向对象的思想进行编程 将组件封装成类 将 JSON传入构造函数 再由控制器或布局组件 Add进来 由于组件可以重用 在开发后台管理系统 JS游戏上 效率还是很可观的 cha138/Article/program/Java/JSP/201311/20281

相关参考

知识大全 JavaScript中面向对象技术的模拟

JavaScript中面向对象技术的模拟  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!一引言  在

知识大全 PHP面向对象编程快速入门

PHP面向对象编程快速入门  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  面向对象编程(OOP)

知识大全 PHP中实现面向对象编程的研究

PHP中实现面向对象编程的研究  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  面向对象编程的概念

知识大全 面向Java开发人员的Scala指南: 面向对象的函数编程

面向Java开发人员的Scala指南:面向对象的函数编程  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下

知识大全 PHP中实现面向对象编程

PHP中实现面向对象编程  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  这篇文章介绍在PHP的面

知识大全 Delphi面向对象的编程方法(二)

Delphi面向对象的编程方法(二)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!   

知识大全 Delphi面向对象的编程方法(一)

Delphi面向对象的编程方法(一)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Delphi

知识大全 Delphi面向对象的编程方法(三)

Delphi面向对象的编程方法(三)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  跳转语句  

知识大全 Delphi面向对象的编程方法(四)

Delphi面向对象的编程方法(四)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  按照作用范围

知识大全 Delphi面向对象的编程方法(八)

Delphi面向对象的编程方法(八)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  重载一个方法