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

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

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

 

简单对象创建方式

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

工厂方式

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

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

  1. function say(){
  2. alert("喵喵!");
  3. }
  4. functionCreateCat(){
  5. var Cat=new object();
  6. Cat.name="Tom";//添加属性并赋值
  7. Cat.age=2;
  8. Cat.sayHello=say;
  9. return Cat;
  10. }

构造函数方式

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

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

原型方式

  1. function Cat(){
  2. }
  3. Cat.prototype.name="Tom";
  4. Cat.prototype.sayHello=function(){
  5. alert("喵喵!");
  6. }
  7. var cat =new Cat();
  8. cat.sayHello();

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

 

  1. function Cat(){
  2. }
  3. Cat.prototype.name="Tom";
  4. Cat.prototype.legs=newArray("leftfront","leftbehind","rightfront","rightbehind");
  5. Cat.prototype.sayHello=function(){
  6. alert("喵喵!");
  7. }


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

 

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

  1. function Cat(name,age){
  2. this.name=name;
  3. this.age=age;
  4. }
  5. Cat.prototype.sayHello=function(){
  6. alert("喵喵!");
  7. }
  8. var cat =new Cat("Tom",27);
  9. cat.sayHello();

动态原型

  1. function Cat(name,age){
  2. this.name=name;
  3. this.age=age;
  4. if(typeofCat.initialized=="undefined"){
  5. Cat.prototype.sayHello=function(){
  6. alert("喵喵!");
  7. }
  8. Cat._initialized=true;
  9. }
  10. }

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

总结

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

几类javascript常用的创建对象方法的更多相关文章

  1. php面向对象类中常用的魔术方法

    php面向对象类中常用的魔术方法   1.__construct():构造方法,当类被实例化new $class时被自动调用的方法,在类的继承中可以继承与覆盖该方法,例: //__construct( ...

  2. JavaScript常用对象的方法和属性

    ---恢复内容开始--- 本文将简单介绍JavaScript中一些常用对象的属性和方法,以及几个有用的系统函数. 一.串方法 JavaScript有强大的串处理功能,有了这些串方法,才能编写出丰富多彩 ...

  3. JavaScript常用定义和方法

    1.字符串一些常用方法,注意,调用这些方法本身不会改变原有字符串的内容,而是返回一个新字符串.toUpperCase()把一个字符串全部变为大写: var s = 'Hello'; s.toUpper ...

  4. JavaScript常用函数和方法

    alert('Hello World!') //方法用于显示带有一条指定消息和一个 OK 按钮的警告框. //定义js函数 function Foo(name) { console.log(name) ...

  5. JavaScript常用标签和方法总结

    什么是javascript?   (1) JavaScript是一种基于对象(Object)和事件驱动(Event Driven)并具有安全性能的 脚本语言. (2) JavaScript是由Nets ...

  6. java网络编程ServerSocket类 和Socket类的常用构造方法及其方法

    Socket类Socket(InetAddress address, int port) 创建一个流套接字并将其连接到指定 IP 地址的指定端口号.Socket(String host, int po ...

  7. Python 类的常用内置方法

    类的内置方法(魔法方法): 凡是在类内部定义,以__开头__结尾的方法,都是类的内置方法,类的内置方法,会在满足某种条件下自动触发. 1.1__new__ __new__:在___init__触发前, ...

  8. javascript 常用array类型方法

    concat:基于当前数组中的所有项创建一个新数据,会创建当前数组一个副本,然后将接受到的参数放到数组末尾,最后返回新数组.如果没有参数,则复制当前数组并返回副本. slice:基于当前数组中一个或多 ...

  9. JavaScript 常用数组函数方法专题

    1. 由字符串生成数组 split() 分割字符串,并将分割的部分作为一个元素保存在一个新建的数组中. var str1 = "this is an emample to using the ...

随机推荐

  1. STL源码分析-traits

    http://note.youdao.com/noteshare?id=b5fd9f936cd133af3790a8b0e9c35b8a

  2. Python与R的争锋:大数据初学者该怎样选?

    在当下,人工智能的浪潮席卷而来.从AlphaGo.无人驾驶技术.人脸识别.语音对话,到商城推荐系统,金融业的风控,量化运营.用户洞察.企业征信.智能投顾等,人工智能的应用广泛渗透到各行各业,也让数据科 ...

  3. OpenCV---色彩空间(一)

    颜色空间:用三种或者更多特征来指定颜色的方法,被称为颜色空间或者颜色模型 1.RGB(OpenCV中为BGR): 一幅图像由三个独立的图像平面或者通道构成:红.蓝.绿(以及可选项:透明度alpha通道 ...

  4. 安装配置hexo icarus主题配置

    安装部分配置hexo icarus主题配置 安装icarus 直接下载主题模块放到blog项目 ,blog项目根目录执行 git clone https://github.com/ppoffice/h ...

  5. python标准数据类型 Bytes

    预备知识: bin(): """ Return the binary representation of an integer. >>> bin(279 ...

  6. IIS 网站日志分析

    最近由于ADSL代理总出问题,导致爬虫服务器总被目标网站封,由于请求内容总是空,前端APP获取不到想要的内容就一直刷新,导致爬虫服务器请求更加繁忙. 爬虫服务器每执行完一个流程,都会给统计服务器Pos ...

  7. JQuery 中三十一种选择器的应用

    选择器(selector)是CSS中很重要的概念,所有HTML语言中的标记都是通过不同的CSS选择器进行控制的.用户只需要通过选择器对不同的HTML标签进行控制,并赋予各种样式声明,即可实现各种效果. ...

  8. IO流-读取写入缓冲区

    例如FileReader和FileWriter在读取的时候是读一次或者写一次就请求磁盘,这样使用的时间非常的长,效率比较低,因此引入BufferedReader和BufferedWriter作为读取和 ...

  9. 从INT_MAX和INT_MIN看补码

    刷一道题的时候遇到INT_MAX和INT_MIN的问题,有些东西忘了,梳理一下. INT_MAX为2147483647,INT_MIN为-2147483648,为什么MIN的绝对值比MAX多1呢,因为 ...

  10. bootstrap带图标的按钮与图标做连接

    bootstrap通过引入bootstrap的JS与css文件,给元素添加class属性即可. 使用图标只需要加入一个span,class属性设置为对应的图标属性即可.图标对应的class属性可以参考 ...