函数方法that与apply

方法

在一个对象中绑定函数,称为这个对象的方法

var xiaoming = {
    name: ‘xiaoming‘,
    brith: 1997,
    age: function(){
        var y = new Date().getFullYear();
        return y - this.brith;
    }
} 

xiaoming.age() // 21

当我们想使用第三方变量替换冗长的xiaoming.age()的时候,我们来看看效果

// 写法1
fn = xiaoming.age;
fn()  // NaN

// 写法2
fn = xiaoming.age();
fn // 21

当我们采用第一种写法的时候实际是将age方法提出来了,那么this所指向的对象也变成了window,故表示NaN

那么为了避免被外部调用,并且可以循环使用其age()我们引入that

‘use strict‘
var xiaoming = {
    brith: 1997,
    age: function(){
        // 从方法一开始就获取this
        that = this;
        function getAgeFromBrith() {
            var y = new Date.getFullYear();
            return y - that;
        }
        return getAgeFromBrith();
    }
}

xiaoming.age(); // 21

var fn = xiaoming.age;
fn(); // Uncaught TypeError: Cannot read property ‘birth‘ of undefined

apply与call

我们知道函数通过this来指代对象,那如果我们想指代某一对象应该如何操作呢?

这时候就可以使用applycell

function getAge() {
 return this.age;
}

var xiaoming = {
    name: ‘kaso‘,
    age: 20
}

getAge.apply(xiaoming, []); //20
getAge.call(xiaoming, []);  //20

appay | call 区别

//调用Math.max(3, 4, 5)

Math.max.apply(null, [3, 4, 5]) // 5
Math.max.call(null,3,4,5)  // 5

装饰器

装饰器多用于将函数进行改造更名,如改造alert使其具有弹窗与控制台双重功能

// 保存原来的 alert
var oldAlert = alert;

window.alert = function() {
    alert(this);
    console.log(this);
    return oldAlert.apply(null, arguments);
}

alert("halo")

原文地址:https://www.cnblogs.com/jilaokang/p/8648767.html

时间: 2024-07-30 21:02:41

函数方法that与apply的相关文章

函数的属性length、prototype和方法call()、apply()

length指的是该函数所期望传递进来的参数个数. function fun0(){}             //0 function fun1(num1){}         //1 function fun2(num1,num2){}    //2 //prototype function MyObject(name, size)  { this.name = name; this.size = size; } var obj = new MyObject(); MyObject.prot

R中的高效批量处理函数(lapply sapply apply tapply mapply)(转)

转自:http://blog.csdn.net/wa2003/article/details/45887055 R语言提供了批量处理函数,可以循环遍历某个集合内的所有或部分元素,以简化操作. 这些函数底层是通过C来实现的,所以效率也比手工遍历来的高效.批量处理函数有很重要的apply族函数:lapply sapply apply tapply mapply.apply族函数是高效能计算的运算向量化(Vectorization)实现方法之一,比起传统的for,while常常能获得更好的性能. ap

JavaScript函数内部属性和函数方法

函数是对象,有自己的属性和方法 .首先通过console下输出的函数属性方法来直观的看一下: 函数内部属性只要包括两个特殊的对象:arguments和this. 函数属性包括:length和prototype 函数方法(非继承)包括:apply()和call() 继承而来的函数方法:bind().toString().toLocaleString().valueOf() 其他的目前不熟,后面再补充 1. 函数内部属性 在函数内部,有两个特殊的对象,arguments和this. argument

pandas.DataFrame学习系列2——函数方法(1)

DataFrame类具有很多方法,下面做用法的介绍和举例. pandas.DataFrame学习系列2--函数方法(1) 1.abs(),返回DataFrame每个数值的绝对值,前提是所有元素均为数值型 1 import pandas as pd 2 import numpy as np 3 4 df=pd.read_excel('南京银行.xlsx',index_col='Date') 5 df1=df[:5] 6 df1.iat[0,1]=-df1.iat[0,1] 7 df1 8 Open

[二] java8 函数式接口详解 函数接口详解 lambda表达式 匿名函数 方法引用使用含义 函数式接口实例 如何定义函数式接口

函数式接口详细定义 package java.lang; import java.lang.annotation.*; /** * An informative annotation type used to indicate that an interface * type declaration is intended to be a <i>functional interface</i> as * defined by the Java Language Specificat

java函数方法

1.方法重载 (1)源代码 // MethodOverload.java // Using overloaded methods public class MethodOverload { public static void main(String[] args) { System.out.println("The square of integer 7 is " + square(7)); System.out.println("\nThe square of doubl

thinkphp模版调用函数方法

原文:thinkphp模版调用函数方法 {变量|函数1|函数2|函数3=参数1,参数2,参数3,###} ###为第4个参数,代表变量替换为第4个参数 举例: {$username|substr=0,3}取标题中前3个字符 {$times|date='Y-m-d H:i:s',###}将times时间戳转换为日期格式 ================================================== 冒号执行函数的用法:输出方法并执行返回值 {:U('user/insert')

Go语言之函数方法

在Go语言中,函数和方法不太一样,有明确的概念区分.在其他语言中,比如Java,一般来说,函数就是方法,方法就是函数.但是在Go语言中,函数是指不属于任何结构体.类型的方法.也就是说,函数是没有接收者的:而方法是有接收者的.我们说的方法要么是属于一个结构体的,要么属于一个新定义的类型的. 函数 函数和方法,虽然概念不同,但是定义非常相似.函数的定义声明没有接收者,所以我们直接在Go文件里.Go包之下定义声明即可. func main() {     sum := add(1, 2)     fm

数组和函数方法

数组:是一个具有相同类型的数据值的索引集合 数据类型[]变量名=new 数据类型[数组长度]; 定义一个长度为五的整数数组:int [] a=new int[5]; 直接初始化数据:int []a={      }: 数据长度:a.length 注意:数组只能是一种类型 数组定以后分配了连续的内存空间 数组下标从0,开始到数组长度-1 数组下标不能为0,也不能为小数 数组长度只能是整数,不能是长整形数字 数组声明定义后长度无法改变 数组应用:生成五个不相同的两位数,并按从小到大的顺序排列 考(下