几类javascript常用的创建对象方法

标签: javascript 对象 方法 | 发表时间:2013-11-21 07:22 | 作者:leimengyuanlian
出处:http://blog.csdn.net

               JavaScript的一个重要功能就是面向对象的功能,通过基于对象的程序设计,可以用更直观、模块化和可重复使用的方式进行程序开发。

一组包含数据的属性和对属性中包含数据进行操作的方法,称为对象。比如要设定网页的背景颜色,所针对的对象就是document,所用的属性名是bgcolor,如document.bgcolor="blue",就是表示使背景的颜色为蓝色。

    JavaScript中的所有事物都是对象:字符串、数值、数组、函数此外,JavaScript允许自定义对象。所以javasript中的对象可以跟为内置对象和自定义对象两大类。javascript中的内置对象对于我们来说并不陌生,如Date(日期)对象、Array(数组)对象、Boolean(逻辑)对象、Global对象等。与之对应的是自定义对象的创建跟使用。在其他面向对象的语言中,对象的创建方式几乎都一致有一个统一的标准,然而由于javascript的灵活性,使得对象的定义跟创建都很灵活,没有统一的标准。正是由于没有标准,所以用起来稍不注意就会给代码带来隐患。


简单对象创建方式

var Cat;
 Cat.name="tom";//添加属性并赋值
 Cat.age=2;
 Cat.sayHello=function(){
  alert("喵喵!");}
 Cat.sayHello();

工厂方式

functionCreateCat(){
var Cat=new object();
 Cat.name="Tom";//添加属性并赋值
 Cat.age=2;
 Cat.sayHello=function(){
  alert("喵喵!");
}
 return Cat;
}
 Cat.sayHello();//调用对象方法

每个对象都有自己的sayHello方法,所以开发者在此基础上有做了新的改进

function say(){
  alert("喵喵!");
}
 
functionCreateCat(){
var Cat=new object();
 Cat.name="Tom";//添加属性并赋值
 Cat.age=2;
 Cat.sayHello=say;
return Cat;
}


构造函数方式

function Cat(name,age){
   this.name=name;//this当前对象
   this.age=age;
    this.sayHello=function(){
      alert("喵喵!");
   }
}
var cat =new Cat("Tom",5,);//实例化/创建对象
cat.sayHello();//调用方法

缺点同最初工厂方法一样每个对象都有自己的方法或函数。


原型方式

function Cat(){
 
 }
 Cat.prototype.name="Tom";
 Cat.prototype.sayHello=function(){
 alert("喵喵!");
 }
 var cat =new Cat();
 cat.sayHello();

    原型方式实现了属性和函数的共享,解决了工厂及构造函数的不能共享函数的问题,同时也带来了新的问题。原型方式 不能通过构造函数初始化属性,当属性是常量或函数时没有问题,当属性为对象时此时多个对象就会共享此属性即所有对象的此属性指针指向同一对象。


function Cat(){
 
 }
 Cat.prototype.name="Tom";
 Cat.prototype.legs=newArray("leftfront","leftbehind","rightfront","rightbehind");
 Cat.prototype.sayHello=function(){
 alert("喵喵!");
 }

此时Cat类型所有对象的legs属性都共享一个数组对象。


混合模式(原型和构造函数)

function Cat(name,age){
  this.name=name;
  this.age=age; 
}
 Cat.prototype.sayHello=function(){
   alert("喵喵!");
  }
var cat =new Cat("Tom",27);
cat.sayHello();

 

动态原型

function Cat(name,age){
  this.name=name;
  this.age=age;
if(typeofCat.initialized=="undefined"){
 Cat.prototype.sayHello=function(){
   alert("喵喵!");
  }
Cat._initialized=true;
}
}

该方法使用标志(_initialized)来判断是否已给原型赋予了任何方法。该方法只创建并赋值一次,与传统的OOP语言,这样的代码更像其它面向对象语言中的定义。


总结

javascript自定义对象主要解决的就是在创建对象时保证属性和方法的创建,并且该类型的所有都象都不共享属性而必须保证该类型的所有对象必须共享函数或方法。目前使用最广泛的是混合的构造函数/原型方式。此外,动态原型方式也很流行,在功能上与构造函数/原型方式等价。不过不要单独使用构造函数或原型模式,因为这两种方式往往会给代码引入问题。

作者:leimengyuanlian 发表于2013-11-20 23:22:28 原文链接
阅读:155 评论:1 查看评论

相关 [javascript 对象 方法] 推荐:

几类javascript常用的创建对象方法

- - CSDN博客Web前端推荐文章
               JavaScript的一个重要功能就是面向对象的功能,通过基于对象的程序设计,可以用更直观、模块化和可重复使用的方式进行程序开发. 一组包含数据的属性和对属性中包含数据进行操作的方法,称为对象. 比如要设定网页的背景颜色,所针对的对象就是document,所用的属性名是bgcolor,如document.bgcolor="blue",就是表示使背景的颜色为蓝色.

javascript对象转json

- - JavaScript - Web前端 - ITeye博客
把javascript对象转成json. 已有 0 人发表留言,猛击->> 这里<<-参与讨论. —软件人才免语言低担保 赴美带薪读研.

javascript封装addClass()方法

- - 收集分享互联网资源!
//获取obj标签对象的class. //如果oClass为空则直接赋newClass. //1、判断当前标签里是否含有newClass,如果含有newClass则return跳出不赋值,避免反复赋同样的newClass. //2、如果不含有newClass,则在原来oClass的基础上添加新的newClass.

学习JavaScript的最佳方法

- 黄立 - 译言-每日精品译文推荐
学习JavaScript的最佳方法. Andrew Burgess 2011年9月21日. You don’t have to worry about finding the best resources, sorting out the bad ones, and figuring out what to learn next.

Javascript定义类(class)的三种方法

- - 阮一峰的网络日志
将近20年前, Javascript诞生的时候,只是一种简单的网页脚本语言. 如果你忘了填写用户名,它就跳出一个警告. 如今,它变得几乎无所不能,从前端到 后端,有着各种 匪夷所思的用途. 程序员用它完成越来越庞大的项目. Javascript代码的复杂度也直线上升. 单个网页包含10000行Javascript代码,早就司空见惯.

Javascript异步编程的4种方法

- - 阮一峰的网络日志
你可能知道,Javascript语言的执行环境是"单线程"(single thread). 所谓"单线程",就是指一次只能完成一件任务. 如果有多个任务,就必须排队,前面一个任务完成,再执行后面一个任务,以此类推. 这种模式的好处是实现起来比较简单,执行环境相对单纯;坏处是只要有一个任务耗时很长,后面的任务都必须排队等着,会拖延整个程序的执行.

Javascript网页截屏的方法

- - WebHek
最近我在研究开发一个火狐插件,具体的功能是将网页内容截屏并分享到微博上. 目前基本功能已经实现,大家可以在 @程序师视野 里看到用这个截图插件分享的微博的效果. 之前我曾写过 如何将canvas图形转换成图片和 下载canvas图像的方法,这些都是在为这个插件做技术准备. 技术路线很清晰,将网页的某个区域的内容生成图像,保持到canvas里,然后将canvas内容转换成图片,保存到本地,最后上传到微博.

JavaScript 方法的4种调用模式

- - Harttle Land
函数(Function)是JavaScript的基本模块单元,JavaScript的代码重用, 信息隐藏,对象组合等都可以借助函数来实现. JavaScript中的函数有4种调用模式:. 方法调用(Method Invocation Pattern). 函数调用(Function Invocation Pattern).

如何判断Javascript对象是否存在

- 廖哥 - 阮一峰的网络日志
Javascript语言的设计不够严谨,很多地方一不小心就会出错. 现在,我们要判断一个全局对象myObj是否存在,如果不存在,就对它进行声明.   if (myObj不存在){. 你可能会觉得,写出这段代码很容易. 但是实际上,它涉及的语法问题,远比我们想象的复杂. Juriy Zaytsev指出,判断一个Javascript对象是否存在,有超过50种写法.

面向对象的 JavaScript 编程及其 Scope 处理

- zhibin - IBM developerWorks 中国 : Web development : Articles,Tutorials
在面向对象的 JavaScript 编程中,我们常常会将一些数据结构和操作封装成对象以达到继承和重用的目的. 然而层层封装和继承再加上 JavaScript 中特殊关键字 this 的使用,使得 JavaScript 当前运行 Context 看起来非常的混乱. 很多 developer 为了获取运行时正确的 Context,常常不得已将 function 或者 Object 声明在全局 Global Context 中.