zoukankan      html  css  js  c++  java
  • 浅谈JavaScript创建对象

      好久没写博客了,今天补一下,废话不多说,咱们进入正题。

      在java中,有这么一句话叫”万物接对象“,那么我今天就来说一下在JavaScript中怎么创建对象,当然要与其他语言作对比,作参照,才能更容易理解。

      对象由什么组成,方法与属性(行为)。

      在java中怎么创建对象,无非就是Object obj = new Object(),没错,JavaScript中也可以使用如此,细心的同学会发现,大多数语言在大多数方面有共通之处,

    方法一、

       工厂模式:

          对于工厂模式,这个词大家都不陌生,陌生的话脑补一下”工厂“的车间的生产方式,没错,就是那样,举个栗子:

          function dog(name, age, voice){

            var obj = new Object();

            obj.name = name;

            obj.age = age;

            obj.voice = voice;

            obj.bark = function(){

              alert(this.voice);

            }

            return obj;

          }

          var dog_1 = dog("kugou", 12, " o o o ");

          dog_1.bark();   

          alert(dog_1.name); 

      这个dog函数可以被调用n次(n->),每次调用这个函数都会返回一个含有三个属性和一个方法的对象,但是无法用typeof和instance来判断出对象的类型,即对象无法识别,只能判断出dog_1是object,为此,另外一个模式出现了。

    方法二、

       构造函数模式,在Java,C++中都有构造函数,而且还差不多,都是函数名跟类名相同,比如:

        Java中:

            public class dog{

              public dog(){

              }

            }

       C++也跟Java一样,在Java和C++中构造函数可以有多个,根据参数的不同而不同,扯远了,拐回来。

       在JavaScript中的原生对象都有原生的构造函数,如Object,Array等...。在运行时自动出现在执行环境中。我们也可以创建自定义的构造函数

        

          function dog(name, age, voice){

            this.name = name;

            this.age = age;

            this.voice = voice;

            this.bark = function(){

              alert(this.voice);

            }

          }

          var dog_1 = new dog("kugou", 12, " o o o ");

          dog_1.bark(); 

      在与上面的工厂模式相比,少了显示地创建Object对象,直接将属性和方法都赋给了this对象,而且没有return语句。在创建新的dog对象的时候,要用到new关键字,没错就是new,这跟JavaScript中自带的类的创建方式差不多了吧,new一个对象要经过一下步骤:

          ①创建一个新对象

          ②将构造函数的作用域给新对象,<!--this就指向了这个新对象-->

          ③构造函数中的代码,同时给这个对象添加属性

          ④返回新对象

      对象的constructor属性是用来标识对象的如

      alert(dog_1.constructor == dog)

      alert(dog_1 instanceof dog);

    方法三、

        原型模式

          我们创建的每一个函数都有一个prototype属性,prototype是个对象,它的用途是包含可以由特定类型的所有实例共享所有的属性和方法。

          function dog(){

          }

          dog.prototype.name = "kugou";

          dog.prototype.age = 12;

          dog.prototype.voice = " o o o ";

          dog.prototype.bark = function(){

            alert(this.voice);

          }

          var dog_1 = new dog();

          dog_1.bark();

      所有prototype都会自动获得一个constructor属性,如:dog.prototype.constructor就是指向dog的,而我们的dog的构造函数是一个空函数,与构造函数不同的是新对象的这些属性和方法是由所有实例共享的,而构造函数就是独自拥有的。想理解原型模式,就得先理解ECMAScript中得原型的性质。

      先讲到这,脑休一下 0.0

  • 相关阅读:
    C
    C
    你好,欢迎到这里来
    数组专题
    web前端的性能优化
    MornUI 源码阅读笔记
    application tips
    [转]就这样,创建了自己的运行时共享库(RSL)
    [转]glew, glee与 gl glu glut glx glext的区别和关系
    编码相关了解
  • 原文地址:https://www.cnblogs.com/JustinBaby/p/4907280.html
Copyright © 2011-2022 走看看