`
mtnt2008
  • 浏览: 363609 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

js面向对象基础(整理)

阅读更多

声明:下面的都是在je论坛上看到的,在这里整理了一下。

 

什么才算javascript中的对象:


   a、基本数据类型的包装对象。例如String Number Boolean.建议直接用var s=""; var i=1; var b=false;定义,包装类与java中的包装类不同。javascript中不要用包装类。
   b、javascript预定义的对象。Function Array Date   RegExp  Error等对象。
   c、用new Object()创建的对象。等同与var o={a:0,b:'s'};
   d、用自定义的构造函数创建的对象。function O(){};  var o=new O();
   e、dom模型定义的构造函数,浏览器为你创建的对象。用var o=document.getElementById();或其他方法获得。
   f、null也是对象。typeof(null)= object.undefined 可以理解为变量预编译的初始化值,而null是特殊的对象。如果一个变量=null,说明这个变量是个对象,但不是我上面 提到的任何来源方式的对象。 如document.getElementById(页面中不存在的id);可以产生一个null对象。
   用typeof()  方法返回的是 object 的变量都是对象。 Function除外用new定义的不一定都是对象。

 

在一个自定义“类”中有中有几个地方可以定义属性。
   a、函数名中直接定义。  如Person.name。在这定义相当于类名的属性。静态的,访问的时候必须用Person.name来访问,不能用new Person().name访问,也访问不到。
   b、构造函数的this.中。当你用new function()时,这些属性就是你所持对象的属性。用new Person().属性  来访问。
   c、构建好对象以后,给对象增加属性。和构造函数中的属性使用类似。
   d、函数名的prototype中
   e、父类或Object 的prototype中。(注释: 可用prototype为函数动态新增函数属性与方法 ,相当于对象的属性

 

在prototype中的都是属于对象的公有(方法/属性)

 

静态方法中可以用this.属性来引用静态属性,也可以用类名.属性来应用;对象的方法引用静态变量,只能用类名.属性;

 

JS中面向对象的5中写法

 

//第1种写法
function Circle(r) {
      this.r = r;
}
Circle.PI = 3.14159;
Circle.prototype.area = function() {
  return Circle.PI * this.r * this.r;
}

var c = new Circle(1.0);   
alert(c.area()); 

 

//第2种写法
var Circle = function() {
   var obj = new Object();
   obj.PI = 3.14159;
   
   obj.area = function( r ) {
       return this.PI * r * r;
   }
   return obj;
}

var c = new Circle();
alert( c.area( 1.0 ) );

 

//第3种写法
var Circle = new Object();
Circle.PI = 3.14159;
Circle.Area = function( r ) {
       return this.PI * r * r;
}

alert( Circle.Area( 1.0 ) );

 

//第4种写法
var Circle={
   "PI":3.14159,
 "area":function(r){
          return this.PI * r * r;
        }
};
alert( Circle.area(1.0) );

 

Java 代码 
  1. //第5种写法   
  2. var Circle = new  Function( "this.PI = 3.14159;this.area = function( r ) {return r*r*this.PI;}" );  
  3.   
  4. alert( (new  Circle()).area( 1.0 ) ); 
第1种:
优点:体现了OO的继承特性. 每次初始化Circle对象,都只设置了必须的值(r).

第2种:
缺点:每次都必须初始化很多变量,时间成本+内存成本,相比第一种高昂了点.

第3种:
缺点:虽然实现了封装,但貌似Circle只是一个包名,对于OO的继承好像发挥不大.

第4种:
缺点:同第3种. 只是用了Object Literal方式初始化了对象.

第5种:
缺点:代码编写,确实不方便.没体现更好的分离.

个人觉得第一种更符合OO开发要求!
第四种适合可以理解成封包! 且非常灵活,本身就是一种json格式,所以方便应用于json格式传递环境下,eg:ExtJs就是采用了第一种方式封装核心,第四种方式打包UI

看了大家的回复之后,发觉第一种和第四种是大家常接触的。

//第1种写法
function Circle(r) {
      this.r = r;
}
Circle.PI = 3.14159;
Circle.prototype.area = function() {
  return Circle.PI * this.r * this.r;
}

var c = new Circle(1.0);  
alert(c.area());


//第4种写法
var Circle={
   "PI":3.14159,
"area":function(r){
          return this.PI * r * r;
        }
};
alert( Circle.area(1.0) );

第一种从java角度来说,是一个普通的类,这个类需要调用的时候,就new xx()这样一个对象出来。

第四种,从java的角度来 说,是一个单例类!你调用的时候直接XXX.xx()这样调用,不需要new。

如果你可以理解普通的类,跟单例类的概念,你应该就可以明 白什么类应该是什么用法了。

这2种写法是最常见的,也是推荐的写法。其它的,比较非主流吧。至于第五种,算是垃圾写法 吧,Function效率很低。


1种最规范,不过现在偷懒用2,代码少点。
3,4好像没有内部变量,经常有问题(个人经验)。
5.看就知道,类不能大,代码多了没法读,代码少时候用不错。


这应该也算一种
var Circle=function(){  
    PI = 3.14159;
    return {
        area : function(r){
            return this.PI * r * r;
        }
    }
}();      
alert( Circle.area(1.0) ); 
分享到:
评论

相关推荐

    javascript面向对象技术基础 整理排版了一下

    javascript面向对象技术基础 整理排版了一下 外带了个闭包的文章,下了可以直接打印了

    韩顺平javascript笔记(最全整理 dom编程 oop 基础语法)

    韩顺平老师的javascript笔记 包括基础语法 javascript面向对象编程 dom编程

    javascript面向对象三大特征之继承实例详解

    本文实例讲述了javascript面向对象三大特征之继承。分享给大家供大家参考,具体如下: 继承 在JavaScript中的继承的实质就是子代可以拥有父代公开的一些属性和方法,在js编程时,我们一般将相同的属性放到父类中,...

    JavaScript面向对象中接口实现方法详解

    本文实例讲述了JavaScript面向对象中接口实现方法。分享给大家供大家参考,具体如下: 接口是面向对象编程的基础,它是一组包含了函数型方法的数据结构,与类一样,都是编程语言中比较抽象的概念。比如生活中的接口...

    纯js运用最基础知识实现贪吃蛇

    自己重新学习了一天Js,之前有过基础,花了一点时间做了个贪吃蛇,用最简单的语法,并没有用面向对象,只用面向过程,隔两天可能会用面向对象来写。我认为初学JS的同学们可以下载看看,应该能学到挺多的,里面包含我...

    部分J2EE基础知识整理

    J2EE的基础知识点 集合框架 面向对象的三大特征 JavaWeb 前端比较少 Javascript JQuery 笔记中有其他作者发的博客地址,有的知识点是从其他作者中摘取的 最后欢迎大家补充及纠正

    韩顺平java从入门到精通视频教程(全94讲)学习笔记整理(齐全)-共448页.docx

    java面向对象编程(基础) java图开界面开发 java数据库编程 java文件io流编程 java网络编程 java多线程编程 java ee基础1 java面向对象编程--数据库编程-->java se java 基础2 html--css--javascript-->div+css ...

    java+html+javascript+c+sql+c++基础学习代码大全

    自己精心整理的入门基础代码包括:java,html...java包括java语法,java面向对象,io流,多线程,泛型集合,异常处理,字符串处理,网络编程,常用类等 html+javascript特效 c&c++基础语法 sql基础加高级 包括多个小型项目源代码

    python核心笔记整理pdf版本

    Python 是一种支持面向对象的解释性高级语言,Simple yet Powerful 是人们对它的 一致评价。最初是在苹果计算机上被编译成功的,但现在他已经可以运行于世界上主流的 操作平台之上了。跨平台性极强。它包含多种 ...

    最新Python3.5零基础+高级+完整项目(28周全)培训视频学习资料

    JavaScript面向对象及原型 Dom选择器以及内容文本操作 Dom样式操作 Dom属性及创建标签 Dom提交表单及其他 Dom事件操作 Dom事件操作补充 Dom绑定时间的另外一种方式 JavaScript 词法分析解析 前端学习方法分享 ...

    ElemeFE-node-interview:饿了么Node.JS面试题解答

    本项目虽然是基于饿了么Node面试教程而来,但是在此基础上做了拓展,比如在JS基础部分加入了面向对象 原型链等重要知识. 由于原项目包括知识点和常见问题两个部分,我们会先整理知识点部分的文字,再在后面补充常见问题...

    思库教育PHP零基础培训+进阶课程+PHP项目开发实战 21G PHP零基础学习视频教程.txt

    │ │ └[北京思库教育]第57集 面向对象编程(OOP).avi │ ├ │ │ ├[北京思库教育]第58集 构造方法.avi │ │ ├[北京思库教育]第59集 clone及静态方法.avi │ │ ├[北京思库教育]第60集 常量继承.avi │ │ └...

    .NET随身笔记大全

    自己整理的.NET随身笔记,包含C#基础,面向对象,sql,ADO.NET,XML,LINQ,HTML,Javascript,jquery,ASP.NET,MVC,WEB SERVICE,WCF,Unity3D,SVN,设计模式等等。

    PHP从入门到精通.pdf-入门教程.CHM

    包括初识.PHP、PHP环境搭建和开发工具、PHP语言基础、流程控制语句、字符串操作、正则表达式、PHP数组、PHP与Web页面交互、PHP与JavaScript交互、日期和时间、Cookie与Session、图形图像处理技术、文件系统、面向...

    Java学习笔记-个人整理的

    {2.1.3}面向对象的编程}{47}{subsection.2.1.3} {2.2}继承}{48}{section.2.2} {2.2.1}super(), this()}{49}{subsection.2.2.1} {2.2.2}方法重写/覆盖}{50}{subsection.2.2.2} {2.3}修饰符}{51}{section.2.3} ...

    asp.net知识库

    asp.net的网址重定向方法的比较:面向搜索引擎友好 也谈 ASP.NET 1.1 中 QueryString 的安全获取写法 ASP.NET运行模式:PageHandlerFactory 利用搜索引擎引用来高亮页面关键字 网站首页的自动语言切换 应用系统的多...

    python入门到高级全栈工程师培训 第3期 附课件代码

    05 面向对象概念总结 06 反射 07 反射及动态导入模块 08 类的内置attr属性 09 类内置attr属性补充 10 继承的方式完成包装 11 组合的方式完成授权 第27章 01 os模块复习 02 上节课复习 03 内置函数补充及...

    程序员5个刷题网站-web-frontend-interview-questions:Web前端面试题集合

    函数、模块作用域,面向对象(类、继承)、Promise是我比较关注的点,因为它们让很多事情变得简单,你只要不把简单的事情搞得复杂就是高效率了,关注新语法和新api则是加分项 [函数作用域]以下代码运行的结果是怎样...

    PHP和MySQL WEB开发(第4版)

    6.1 理解面向对象的概念 6.1.1 类和对象 6.1.2 多态性 6.1.3 继承 6.2 在PHP中创建类、属性和操作 6.2.1 类的结构 6.2.2 构造函数 6.2.3 析构函数 6.3 类的实例化 6.4 使用类的属性 6.5 使用private和public关键字...

Global site tag (gtag.js) - Google Analytics