声明:下面的都是在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) );
-
-
var Circle = new
Function(
"this.PI = 3.14159;this.area = function( r ) {return r*r*this.PI;}"
);
-
-
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编程
本文实例讲述了javascript面向对象三大特征之继承。分享给大家供大家参考,具体如下: 继承 在JavaScript中的继承的实质就是子代可以拥有父代公开的一些属性和方法,在js编程时,我们一般将相同的属性放到父类中,...
本文实例讲述了JavaScript面向对象中接口实现方法。分享给大家供大家参考,具体如下: 接口是面向对象编程的基础,它是一组包含了函数型方法的数据结构,与类一样,都是编程语言中比较抽象的概念。比如生活中的接口...
自己重新学习了一天Js,之前有过基础,花了一点时间做了个贪吃蛇,用最简单的语法,并没有用面向对象,只用面向过程,隔两天可能会用面向对象来写。我认为初学JS的同学们可以下载看看,应该能学到挺多的,里面包含我...
J2EE的基础知识点 集合框架 面向对象的三大特征 JavaWeb 前端比较少 Javascript JQuery 笔记中有其他作者发的博客地址,有的知识点是从其他作者中摘取的 最后欢迎大家补充及纠正
java面向对象编程(基础) java图开界面开发 java数据库编程 java文件io流编程 java网络编程 java多线程编程 java ee基础1 java面向对象编程--数据库编程-->java se java 基础2 html--css--javascript-->div+css ...
自己精心整理的入门基础代码包括:java,html...java包括java语法,java面向对象,io流,多线程,泛型集合,异常处理,字符串处理,网络编程,常用类等 html+javascript特效 c&c++基础语法 sql基础加高级 包括多个小型项目源代码
Python 是一种支持面向对象的解释性高级语言,Simple yet Powerful 是人们对它的 一致评价。最初是在苹果计算机上被编译成功的,但现在他已经可以运行于世界上主流的 操作平台之上了。跨平台性极强。它包含多种 ...
JavaScript面向对象及原型 Dom选择器以及内容文本操作 Dom样式操作 Dom属性及创建标签 Dom提交表单及其他 Dom事件操作 Dom事件操作补充 Dom绑定时间的另外一种方式 JavaScript 词法分析解析 前端学习方法分享 ...
本项目虽然是基于饿了么Node面试教程而来,但是在此基础上做了拓展,比如在JS基础部分加入了面向对象 原型链等重要知识. 由于原项目包括知识点和常见问题两个部分,我们会先整理知识点部分的文字,再在后面补充常见问题...
│ │ └[北京思库教育]第57集 面向对象编程(OOP).avi │ ├ │ │ ├[北京思库教育]第58集 构造方法.avi │ │ ├[北京思库教育]第59集 clone及静态方法.avi │ │ ├[北京思库教育]第60集 常量继承.avi │ │ └...
自己整理的.NET随身笔记,包含C#基础,面向对象,sql,ADO.NET,XML,LINQ,HTML,Javascript,jquery,ASP.NET,MVC,WEB SERVICE,WCF,Unity3D,SVN,设计模式等等。
包括初识.PHP、PHP环境搭建和开发工具、PHP语言基础、流程控制语句、字符串操作、正则表达式、PHP数组、PHP与Web页面交互、PHP与JavaScript交互、日期和时间、Cookie与Session、图形图像处理技术、文件系统、面向...
{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 1.1 中 QueryString 的安全获取写法 ASP.NET运行模式:PageHandlerFactory 利用搜索引擎引用来高亮页面关键字 网站首页的自动语言切换 应用系统的多...
05 面向对象概念总结 06 反射 07 反射及动态导入模块 08 类的内置attr属性 09 类内置attr属性补充 10 继承的方式完成包装 11 组合的方式完成授权 第27章 01 os模块复习 02 上节课复习 03 内置函数补充及...
函数、模块作用域,面向对象(类、继承)、Promise是我比较关注的点,因为它们让很多事情变得简单,你只要不把简单的事情搞得复杂就是高效率了,关注新语法和新api则是加分项 [函数作用域]以下代码运行的结果是怎样...
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关键字...