zoukankan      html  css  js  c++  java
  • JS创建对象的几种方式详解

     Js是一门面向对象的语言,里面没有类的思想,所以直接是创建对象,下面介绍几种创建对象的方法:

        1.对象字面量的方法:记住键值对格式:{key:value,key :value}

    实例:

    Var obj={name:”演员”,move:”长城”,age:”18”}

    如果想再创建一个新的对象,只能重复上面的操作,所以可操作性差,不能被重复使用,造成的直接后果就是代码的冗余度很高

    2使用内置的构造函数 object

    Var obj=new Object();

    Obj.name=”梁朝伟”;

    Obj.movie=”赤壁“;

    Obj.age=”38”;

    如果我们想在定义一个新的对象,该段代码的缺点显而易见了

    3.封装一个工厂函数来解决上述的问题

    function createStar(name,movie ,age){

      var o=new Object();

      o.name=name;

      o.movie=movie;

      o.age=age;

      o.say=function(){

        console.log(“我是”+this.name);

      }

      return o;

    }

     var obj=createStar(“”,””,28);

     var obj1=createStar(“”,””,38);

    4.自定义构造函数

          //什么是构造函数?
          //构造函数其实也是函数,但是通常用来初始化对象
         //并且和new关键字同时出现

        function Person(){
        this.name="憨力";
        this.age=28;
        this.say=function(){
            alert("我是"+this.name);
        }
      }

     var p=new person();

     也就是可以进行传值,此时this指向的就是p对象

     遇到的问题1

     如果person(),被当成普通的函数执行,就会遇到一个问题,this的指向会是windows

     遇到的问题2

     每创建一个新的对象,函数say就会被调用一次,这样就造成了函数被多次调用,造成了系统资源的极大栏废

    如果在在构造函数之外创建一个函数呢?

      :function say(){

       alert(“”);

     }

     把上面的函数改成有参数的函数

       function Person(name,age,func){
        this.name=name;
        this.age=age;
        this.say=func;  }

       var pp=new Person(“”,””,say);

    但是又会造成新的问题;全局变量的污染,怎么解决呢?就涉及到原型的问题了。

    预知后文如何,且听以后的分解吧!

  • 相关阅读:
    【转】SVN linux命令及 windows相关操作(二)
    【转】SVN linux命令及 windows相关操作(一)
    spring框架DI(IOC)和AOP 原理及方案
    [转载]JVM性能调优--JVM参数配置
    JVM性能调优-GC内存模型及垃圾收集算法
    密码运算API(GP Internal API)
    时间API(GP Internal API)
    可信存储API(GP Internal API)
    内存管理函数(GP Internal API)
    Panic(GP Internal API)
  • 原文地址:https://www.cnblogs.com/z-web-2017/p/6930647.html
Copyright © 2011-2022 走看看