javascript之面向对象

对象:

  1. 创建对象常用的两种方式,

    • 工厂模式:

      function creatObject(name,age){
          var o   = new Object();
          o.name  = name;
          o.age   = age;
          o.run   = function(){
              return this.name +this.age+"run....";
          }
          return o;
      }
      var ob1 = creatObject('sdfas',11);
      alert(ob1.run());
      
      #工厂模式有一个问题,就是只能判断创建的对象是Object类型,其他则无法判断。
      
    • 构造函数模式:

    function Student(name,age) {
        this.name   = name;
        this.age    = age;
        this.run    = function(){
            return this.name + this.age+"run ....";
        }
    }
    var s   = new Student('mmm',100);
    alert(s.run())
    
    #如果使用var s=Student('mmm',100),这种形式,则函数定义时,使用的this将指向全局对象window
    

    构造函数模式和工厂模式的区别:
    1.构造函数方法没有显示的创建对象(new Object());
    2.直接将属性和方法赋值给this 对象;
    3.没有renturn 语句。

    构造函数模式中对象的创建过程:
    1.当使用了构造函数,并且new 构造函数(),那么就后台执行了new Object();
    2.将构造函数的作用域给新对象,(即new Object()创建出的对象),而函数体内的this 就
    代表new Object()出来的对象。
    3.执行构造函数内的代码;
    4.返回新对象(后台直接返回)。

    注意:this 其实就是代表当前作用域对象的引用。如果在全局范围this 就代表window 对象,如果在构造函数体内,就代表当前的构造函数所声明的对象。

  2. call和apply方法
    call 和 apply 都是为了改变某个函数运行时的 context 即上下文而存在的,换句话说,就是为了改变函数体内部 this 的指向。因为 JavaScript 的函数存在「定义时上下文」和「运行时上下文」以及「上下文是可以改变的」这样的概念.

    二者的作用完全一样,只是接受参数的方式不太一样。
    例如,有一个函数 func1 定义如下:
    var func1 = function(arg1, arg2) {};
    就可以通过 func1.call(this, arg1, arg2); 或者 func1.apply(this, [arg1, arg2]); 来调用。其中 this 是你想指定的上下文,他可以任何一个 JavaScript 对象(JavaScript 中一切皆对象),call 需要把参数按顺序传递进去,而 apply 则是把参数放在数组里。

    JavaScript 中,某个函数的参数数量是不固定的,因此要说适用条件的话,当你的参数是明确知道数量时,用 call,而不确定的时候,用 apply,然后把参数 push 进数组传递进去。当参数数量不确定时,函数内部也可以通过 arguments 这个数组来便利所有的参数。

    此处引用自 作者:赵望野
    https://www.zhihu.com/question/20289071/answer/14745394

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值