• javascript:Functions (1)


    函数对象 Function Object

    函数就是对象。对象字面量产生的对象链接到Object.prototype。函数对象链接到Function.prototype。每个函数在创建时附有两个附件的隐藏属性:函数的上下文和实现函数行为的代码。

    函数字面量 Function Literal

    函数对象可以通过函数字面量来创建。

    var add = function(a, b){return a+b;};

    调用 Invocation

    除了声明时定义的形式参数,每个函数接收两个附加的参数:this 和arguments。

    this在面向对象编程中非常重要,它的值取决于调用的模式。在JS中,一共有四种调用模式,这些模式在初始化参数this上存在差异。

    1、方法调用模式

    2、函数调用模式

    3、构造器调用模式

    4、apply调用模式

    方法调用模式 The Mehtod Invocation Pattern

    当一个函数被保存为一个对象的属性并且被调用时,this绑定到该对象。

    通过this可取得他们所属对象的上下文的方法称为公共方法。

    var myObject = {
    value :
    0,
    increment:function(inc)
    {
    this.value += (inc);
    }
    };
    myObject.increment(
    3);
    myObject.increment(
    3);
    alert(myObject.value);
    //result is 6.

    函数调用模式 The Function Invocation Pattern

    在函数调用模式下,this被绑定到全局对象上。这个是javascript语言设计上的一个错误。

    看如下code:

    var g='globle';
    var o
    =function()
    {
    var g
    = 'self';
    alert(
    this.g);
    }();
    //result is 'globle'. it is not correct.

    可以采用以下方法避免

    var g='globle';
    var o
    =function()
    {
    var that
    = this;
    that.g
    ='self';
    alert(
    this.g);
    }();
    //result is 'self', it is correct.

    构造器调用模式 The Consultant Invocation Pattern

    js是居于原型继承的语言,所以对象可以从其他对象直接继承属性。该语言是无类别的。

    如果一个函数前面带上new来调用,那么将创建一个隐藏链接到该函数的prototype成员的新对象,同时this将会被绑定到那个新对象上。

    不推荐使用这种方法。

    var Quo=function(string)
    {
    this.status =string;
    };
    Quo.prototype.get_status
    = function(){return this.status;};
    var myQuo
    = new Quo("Confused");
    alert(myQuo.get_status());
    //new could not be lost.

    Apply调用模式 The Apply Invocation Pattern

    通过apply/call方法调用函数,其中第一个参数为我们指定的this的值。

    var statusObject = {status : 'A-OK'};
    var status
    = Quo.prototype.get_status.apply(statusObject);
    //result is 'A-OK';the first param is "this" value.
  • 相关阅读:
    Spring中常用的配置和注解详解
    SpringBoot中的常用配置
    Maven项目创建问题
    hibernate缓存:一级缓存和二级缓存
    Hibernate标准查询
    Hibernate中Hql的查询
    Hibernate中对象的三种状态
    Hibernate中使用load和get加载的区别
    Spring增强
    Spring代理模式
  • 原文地址:https://www.cnblogs.com/RitaRichard/p/2098516.html
Copyright © 2020-2023  润新知