`
Jamson
  • 浏览: 6011 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

JS 中面向对象的5种写法

阅读更多
//定义Circle类,拥有成员变量r,常量PI和计算面积的成员函数area()

//第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) );

//第5种写法
var Circle = new Function("this.PI = 3.14159;this.area = function( r ) {return r*r*this.PI;}");

alert( (new Circle()).area(1.0) );


大家来讨论一下这五种写法,它们的优缺点,哪个比较规范,特别是最后两种,经常见到。
分享到:
评论
46 楼 vieri122 2009-09-17  
个人一直用第一种!
45 楼 qipei 2009-09-01  
我一般都这么写:下划线开始的是私有的。
调用的时候直接Folder.deleteFolder();
Folder = function() {
	
	_currentFolder: null;

	function _createFolderOnFolder(parentId) {
		
	}
	
	function _createFolderOnRepository(parentId) {
		
	}
	
	var Folder = {
	
		deleteFolder: function(p_sType, p_aArgs, p_sNode) {
			
		},
		
		setCurrentFolder: function(node) {
			_currentFolder = node;
		},
		
		getCurrentFolder: function() {
		}
	};
	return Folder;
}();
44 楼 deyami 2009-08-25  
这应该也算一种

var Circle=function(){  
    PI = 3.14159;
    return {
        area : function(r){
            return this.PI * r * r;
        }
    }
}();
     
alert( Circle.area(1.0) ); 
43 楼 loocao 2009-08-25  
个人比较喜欢第一种跟第四种,第一种比较大众化,第四种看着比较简洁,易懂...
42 楼 richardhochou 2009-08-17  
习惯第四种,嘿嘿,json的看起来舒服好多.
41 楼 80x86 2009-08-15  
都可以吧,不过是第三种更JavaScript的风格一点儿
40 楼 linhong_1001 2009-08-15  
后面四种没有把cicle算作真正的对象,半径要作为参数传入,晕倒,你给定一个圆,他就该有半径啊,写得很烂
39 楼 我奋斗 2009-08-14  
学习了谢谢!。
38 楼 techno_it 2009-08-14  
看到prototype用的就是第四种,对第一种没有太见过,第二种感觉挺好理解的。
37 楼 prothi 2009-08-14  
第一种是正确的,第二,三,四种都不正确,那个Area函数应该是类函数吧,但是这三种方法将它分配给每一个对象,这是一种资源浪费。而第一种是相当与一个类函数,就像java里面的函数一样,不是为每个对象分配一个。第五种写法不是很容易看懂。所以,第一种是首选,或者说必须选择的方法。
36 楼 sxpyrgz 2009-08-13  
第四种结合第一种,是相当不错的选择
35 楼 vakin.jiang 2009-08-11  
第四种最优雅
34 楼 fish2007 2009-08-11  
根据需要来定,如果你觉得某种方式更简洁,更能让人读懂和理解,那就那种是最合适的
33 楼 robertpi 2009-08-10  
1种最规范,不过现在偷懒用2,代码少点。
3,4好像没有内部变量,经常有问题(个人经验)。
5.看就知道,类不能大,代码多了没法读,代码少时候用不错。
32 楼 Jamson 2009-08-10  
pure 写道
也喜欢第四种,不过LZ还是先把标题的别字改过来嘿?


哇!竟然还真的没人告诉过我写错字了。感谢感谢!

本人已经改正:钟-->种
31 楼 pure 2009-08-10  
也喜欢第四种,不过LZ还是先把标题的别字改过来嘿?
30 楼 free_self 2009-08-10  
觉得第四种比较喜欢,看起来比较简单易懂
29 楼 playfish 2009-08-10  
vb2005xu 写道
还有一种写法你没有见过吧,这种感觉才是最好的,连着 命名空间一起建好了
if (!window['google']) {
window['google'] = {};
}
if (!window['google']['loader']) {
window['google']['loader'] = {};
google.loader.ServiceBase = 'http://www.google.com/uds';
google.loader.GoogleApisBase = 'http://ajax.googleapis.com/ajax';
google.loader.ApiKey = 'notsupplied';
google.loader.KeyVerified = true;
google.loader.LoadFailure = false;
google.loader.Secure = false;
google.loader.ClientLocation = null;
google.loader.AdditionalParams = '';



这种写法其实跟列出来的第三种写法差不多, var xxx = new Object();跟var xxx={};是一样的,{}是Object的直接量表示,跟第四种写法
var xxx={

}
也是一样的。google这里的写法跟第四种写法是一样效果。
google.loader={
ServiceBase = 'http://www.google.com/uds',
GoogleApisBase = 'http://ajax.googleapis.com/ajax',
ApiKey = 'notsupplied',
KeyVerified = true,
LoadFailure = false,
Secure = false,
ClientLocation = null,
AdditionalParams = ''
}

不要拿更多的例子来误导别人了。无论新手老手,用第1种跟第4种就可以了。第1种跟第4种是不一样的。适用的场合跟范围不太一样。
28 楼 fantasybei 2009-08-10  
"回"字也有五种写法....
27 楼 vb2005xu 2009-08-10  
还有一种写法你没有见过吧,这种感觉才是最好的,连着 命名空间一起建好了
if (!window['google']) {
window['google'] = {};
}
if (!window['google']['loader']) {
window['google']['loader'] = {};
google.loader.ServiceBase = 'http://www.google.com/uds';
google.loader.GoogleApisBase = 'http://ajax.googleapis.com/ajax';
google.loader.ApiKey = 'notsupplied';
google.loader.KeyVerified = true;
google.loader.LoadFailure = false;
google.loader.Secure = false;
google.loader.ClientLocation = null;
google.loader.AdditionalParams = '';

相关推荐

    Javascript面向对象编程.

    在提供的资源中,《代码之美》PDF文件可能包含了关于编程实践和代码风格的指导,而《Javascript面向对象编程》PPT可能更具体地阐述了JavaScript OOP的细节和示例。学习这些材料将有助于深入理解JavaScript的面向对象...

    MooCSS模块化面向对象的css写法

    《MooCSS:模块化面向对象的CSS写法详解》 在现代Web开发中,CSS已经从简单的样式语言发展为复杂、高效的样式管理系统。MooCSS(Module-Oriented Object CSS)是一种基于模块化和面向对象思想的CSS编写方式,旨在...

    js面向对象的写法

    以下将详细介绍标题和描述中提到的四种常见的JavaScript面向对象写法以及`this`关键字的使用。 1. **工厂模式** 工厂模式是通过函数来创建对象,它不直接关联构造函数。在给定的例子中,`Circle`函数创建了一个新...

    JavaScript面向对象编程指南(第2版).rar

    JavaScript是一种广泛...通过深入学习这本《JavaScript面向对象编程指南(第2版)》,开发者不仅能掌握JavaScript的面向对象编程基础,还能了解到实际项目中如何有效地运用这些知识,提升编程技巧和解决问题的能力。

    讲解JavaScript的面向对象的编程

    -目的说明它是在第1,2阶段文档演示的JavaScript面向对象的书写方式的进一步改进,它是现代JavaScript面向对象编程方式(使用基本类来编码)的过渡代码--没有它就没有当今的JS OOP--此人非常牛!!! 4. 最后使用IE...

    js面向对象游戏开发,飞机大战

    在JavaScript的世界里,面向对象编程(Object-Oriented Programming,OOP)是一种常见的设计模式,尤其在游戏开发中,它能帮助我们构建复杂且可扩展的代码结构。本项目"js面向对象游戏开发,飞机大战"是利用...

    归纳下js面向对象的几种常见写法总结

    JavaScript面向对象编程是一种编程范式,它围绕对象——一种包含属性和方法的实例——来组织代码。在JavaScript中,对象可以使用多种方式创建,每种方式都有其特点和适用场景。本文将总结几种常见的JavaScript面向...

    选项卡改变为面向对象写法后,复用和增加方法.md

    面向对象写的一个点击选项卡,复用这个面向对象写法,同时为不同的添加不一样的方法

    JS 面向对象的5钟写法

    在JavaScript中,面向对象编程(OOP)是创建复杂、可维护代码的一种重要方式。这里我们探讨五种不同的实现面向对象的方法,每种方法都有其特点和适用场景。 1. **构造函数+原型链(第1种写法)** 这是最常见的面向...

    JavaScript面向对象基础PPT

    JavaScript面向对象基础PPT,讲述了何谓面向对象、面向对象特点、组成及写法、工厂模式、原型以及如何将普通面向过程的代码转换为面向对象的基本原则

    怎么理解js的面向对象编程共9页.pdf.zip

    以上就是JavaScript面向对象编程的一些关键概念,理解并熟练应用这些知识可以帮助开发者编写出更加高效、可维护的代码。在实际项目中,结合设计模式,如工厂模式、单例模式、观察者模式等,可以进一步提高代码质量。

    js面向对象方法实现拖拽特效

    在"拖拽面向对象写法"的文件中,应该包含了实现上述功能的代码示例。通过分析和学习这个示例,你可以更好地理解如何在JavaScript中结合面向对象和拖拽特效。同时,这也将帮助你掌握如何通过继承扩展已有功能,从而...

    原生js实现无缝轮播(包括面向对象的写法)

    本教程将深入探讨如何使用原生JavaScript实现一个无缝轮播效果,同时结合面向对象编程思想进行代码组织,提高代码复用性和可维护性。 ### 1. 基本思路 无缝轮播的核心在于通过改变图片的位置或CSS属性,使得用户...

    javascript 面向对象程序设计博客文章

    尽管JavaScript的原始OOP机制基于原型,但ES6引入了类语法,它提供了一种更接近传统面向对象语言的写法,但底层仍然基于原型。类的实例化、继承、静态方法等都可以通过类语法实现。 9. **模块系统** JavaScript有...

    高级面向对象写法[收集].pdf

    本文档主要探讨了高级的面向对象写法,包括类的创建、继承、混入和实例化,以及模块化、沙盒机制、模块间解耦和按需加载等主题。 1. **创建类、继承、混入、实例化** JavaScript并非基于类的语言,而是基于原型。...

    JavaScript面向对象程序程序设计PPT与代码

    JavaScript是一种广泛应用于Web开发的脚本语言,尤其在构建交互式网页和...这份"JavaScript面向对象程序程序设计PPT与代码"资源将详细解释这些概念,并可能包含实际示例,帮助你深入理解和应用这些面向对象编程技术。

    简单的选项卡改变为面向对象的写法的一点学习经验总结.md

    写选项卡的时候,要改变为面向对象的写法,面向兑现的写法更容易扩展或者维护,这里是文章的Markdown文档,需要的可以下载浏览,如有错误,欢迎指出 谢谢

    js面向对象(部分)

    以上是JavaScript面向对象编程的基础知识,包括构造函数、原型链、ES6的类、继承以及封装和多态的概念。通过深入理解和实践这些概念,开发者能够编写出更加复杂和模块化的JavaScript应用程序。尽管提供的电子书不...

Global site tag (gtag.js) - Google Analytics