码迷,mamicode.com
首页 > Web开发 > 详细

JS创建对象的几种方式详解

时间:2017-06-01 21:02:30      阅读:257      评论:0      收藏:0      [点我收藏+]

标签:log   参数   创建   代码   详解   对象   传值   封装   return   

 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);

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

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

JS创建对象的几种方式详解

标签:log   参数   创建   代码   详解   对象   传值   封装   return   

原文地址:http://www.cnblogs.com/z-web-2017/p/6930647.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!