zoukankan      html  css  js  c++  java
  • javascript中创建对象的几种方式

    前言:

         随着web 2.0 的兴起(最具代表性的是Ajax技术了),javascript不再是程序员眼中的“玩具语言”。 编程在不断的简化,可是“用户体验、性能、兼容性、可扩展......”要求却在不断提高,随之涌现出Prototype、jQuery、ExtJs、Dojo等优秀的框架(类库),大大简化了web开发。

         越来越多的人开始深入研究和使用javascript,当然,企业对开发者的要求也越来越高。就拿自己的经历来讲,零几年的时候,我能拿javascript写一些页面UI效果,做网站的表单验证等操作,当时觉得已经很酷了。但是换到现在,如果连XMLHttpRequest、JSON是什么都不知道,连javascript中的面向对象/基于对象编程都不了解,还敢称自己是优秀的web程序员吗?(关注前沿技术的朋友,一定了解node.js、MongoDB,这都离不开javascript。)

         javascript的灵活性,让人又爱又恨。典型的入门简单,精通很难。理解javascript OOP/基于对象的编程,是判断程序员javascript水平的分水岭。而javascript 基于对象编程中,最基本的是“创建对象”,往往让很多熟悉其他面向语言(Java、C#、C++)的程序员觉得似懂非懂或者难以适应。所以,本文首先将向大家介绍,javascript 中常见的创建对象的几种方式。

     1. 简单对象的创建    使用对象字面的方式{}   创建一个对象(最简单,好理解,推荐使用)

    复制代码
    var Cat  = {};//JSON
     Cat.name="kity";//添加属性并赋值
     Cat.age=2;
     Cat.sayHello=function(){
      alert("hello "+Cat.name+",今年"+Cat["age"]+"岁了");//可以使用“.”的方式访问属性,也可以使用HashMap的方式访问
     }
     Cat.sayHello();//调用对象的(方法)函数
    复制代码

    2.用function(函数)来模拟class (无参构造函数)

         2.1 创建一个对象,相当于new一个类的实例

    复制代码
    function Person(){
    
    }
    var personOne=new Person();//定义一个function,如果有new关键字去"实例化",那么该function可以看作是一个类
    personOne.name="dylan";
    personOne.hobby="coding";
    personOne.work=function(){
    alert(personOne.name+" is coding now...");
    }
    
    personOne.work();
    复制代码

    2.2 可以使用有参构造函数来实现,这样定义更方便,扩展性更强(推荐使用)

    复制代码
    function Pet(name,age,hobby){
       this.name=name;//this作用域:当前对象
       this.age=age;
       this.hobby=hobby;
       this.eat=function(){
          alert("我叫"+this.name+",我喜欢"+this.hobby+",也是个吃货");
       }
    }
    var maidou =new Pet("麦兜",5,"睡觉");//实例化/创建对象
    
     maidou.eat();//调用eat方法(函数)
    复制代码

    3.使用工厂方式来创建(Object关键字)

    复制代码
    var wcDog =new Object();
     wcDog.name="旺财";
     wcDog.age=3;
     wcDog.work=function(){
       alert("我是"+wcDog.name+",汪汪汪......");
     }
    
     wcDog.work();
    复制代码

    4.使用原型对象的方式  prototype关键字

    复制代码
    function Dog(){
     
     }
     Dog.prototype.name="旺财";
     Dog.prototype.eat=function(){
     alert(this.name+"是个吃货");
     }
     var wangcai =new Dog();
     wangcai.eat();
    复制代码

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

    复制代码
    function Car(name,price){
      this.name=name;
      this.price=price; 
    }
     Car.prototype.sell=function(){
       alert("我是"+this.name+",我现在卖"+this.price+"万元");
      }
    
    var camry =new Car("凯美瑞",27);
    camry.sell(); 
    复制代码

    6.动态原型的方式(可以看作是混合模式的一种特例)

    复制代码
    function Car(name,price){
      this.name=name;
      this.price=price; 
      if(typeof Car.sell=="undefined"){
       Car.prototype.sell=function(){
        alert("我是"+this.name+",我现在卖"+this.price+"万元");
       }
     Car.sell=true;
      }
    }
    
    var camry =new Car("凯美瑞",27);
    camry.sell();
    复制代码

    以上几种,是javascript中最常用的创建对象的方式。初学者看到后,可能会晕掉,甚至会觉得担心。其实完全不用担心,这些种方式,只需要掌握一两种,对其他的几种只需要理解就好了。这正是javascript的灵活性。没有固定的推荐方式选择自己最容易理解和掌握的方式即可。每个人的代码风格可能都不同。将来你可能需要去研究jQuery的源码,或者参照别的插件去改写、去开发属于自己的插件,都需要去理解别人的代码风格。而这些类库、插件,都是建立在面向对象/基于对象的基础只上的。

    好了,本文就先介绍到这里。由于笔者表达能力和技术水平确实有限,难免有偏差,望读者谅解!

    转载自:http://www.cnblogs.com/dinglang/archive/2012/09/04/2670776.html

    读者备注:

    常见写法:

    1、习惯这样子创建:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    function Person(firstName,lastName,email,age,jobs){
        this.firstName=firstName;
        this.lastName=lastName;
        this.email=email;
        this.age=age;
        this.jobs=jobs;
        }
    Person.prototype={
        fnGetName:function(){
            alert(this.firstName+" "+this.lastName);
            },
        fnGetEmail:function(){
            alert(this.email);
            }  
        }  
    var p1=new Person("charje","xia","charje@live.com","23");
    p1.fnGetName();
    document.writeln(p1.firstName+" "+p1.lastName)
     
    2、一般这样。
    var Cat = {name:null,age:null,sayHello:null};//JSON
    赋值抽出来处理。
    Cat.name="kity";//赋值
    Cat.age=2;
    Cat.sayHello=function(){
    alert("hello "+Cat.name+",今年"+Cat["age"]+"岁了");//可以使用“.”的方式访问属性,也可以使用HashMap的方式访问
    }
    Cat.sayHello();//调用对象的(方法)函数
  • 相关阅读:
    Find the Smallest K Elements in an Array
    Count of Smaller Number
    Number of Inversion Couple
    Delete False Elements
    Sort Array
    Tree Diameter
    Segment Tree Implementation
    Java Programming Mock Tests
    zz Morris Traversal方法遍历二叉树(非递归,不用栈,O(1)空间)
    Algorithm about SubArrays & SubStrings
  • 原文地址:https://www.cnblogs.com/TinyMing/p/4742383.html
Copyright © 2011-2022 走看看