this 的显示绑定-call、apply

简单的栗子:

function(){
  console.log(this.a);
}
var obj={

  a:2  

};

foo.call(obj);//2  call把foo中的this指向了obj

------------------------------注意↓  "装箱"

当第一个参数传入的是:字符串类型、布尔、数字类型   这个原始值会被转换成它的对象形式

new String()

new Boolean()

new Number()

-----------------------------显示绑定-栗子1↓

function foo(){

  console.log(this.a);

}
var obj={
  a:2
};
var bar=function(){

  foo.call(obj);

};

bar();//

setTimeout(bar,100);//
bar.call(window);//
-----------------------------显示绑定-栗子2↓

function foo(something){//3
  console.log(this.a,something);this.a=2 
  return this.a+something;  //5
}
var obj={

  a:2

};

var bar=function(){
  return foo.apply(obj,arguments);  //arguments=3    foo中的this指向了obj

};
var b=bra(3);
console.log(b);//5

-----------------------------显示绑定-栗子3---------------Function.prototye.bind↓

function foo(something){

  console.log(this.a,something);
  return this,a+something;

}

function bind(fn,obj){//辅助绑定函数

  return function(){

    return fn.apply(obj,arguments);

  }

}
var obj={

  a:2

};
var bar=bind(foo,obj);

var b=bar(3);
console.log(b);

------------------------后续详细说call、apply的参数

时间: 2024-10-15 06:06:46

this 的显示绑定-call、apply的相关文章

knockoutjs学习笔记:显示绑定

从何而来 本系列摘抄自knockoutjs官方文档,同时结合自身项目使用记录心得. 目标 knockoutjs实现CSS显示的绑定 例子 <div data-bind="visible: shouldShowMessage"> You will see this message only when "shouldShowMessage" holds a true value. </div> <script type="text

Qt的action控件中采用默认绑定,没有connect显示绑定!!!

使用qt创建界面时,可以选用代码设计也可以选用qt design来设计.最近看我同事的代码,以前写action都是使用connect链接槽函数的, 网上大多数人都是这样,然后我就纳闷,怎么没有connect,后面发现是采用默认绑定规则(还可以这样!!!!!!!!!,搞死我了,没办法,没有系统学习) qt就是这样!!!!!!! 可以参考下面的链接: 下面内容转自: http://m.blog.csdn.net/yangzijiangtou/article/details/71276127 QT中Q

call apply bind 的区别,this的四种绑定方式

1. apply()中有两个参数,不一定是必填项,当第一个参数什么都不填或则是null/undefined,默认为window 第二个参数必须是数组,数组中的元素和函数的参数对应 Call怎么使用 用途,用于修改函数中的this指向 也是函数ming.call(),执行的元素先替换函数中的this,然后再执行这个函数 Call中参数的分析1. call函数的第一个参数是什么,函数中this就换成什么,当不填或null/undefined,里面的this就是window2. 从第二参数开始,跟函数

js中this的绑定规则及优先级

一.   this绑定规则 函数调用位置决定了this的绑定对象,必须找到正确的调用位置判断需要应用下面四条规则中的哪一条. 1.1 默认绑定 看下面代码: function foo() { console.log(this.a); } var a = 1; foo(); // 2 调用foo的时候,this应用了默认绑定,this指向了全局对象,但是在严格模式下,那么全局对象将无法进行默认绑定,因此this会绑定到undefined function foo() { 'use strict';

this的五种指法

this 到底指向哪里 以下如果没提及,则为严格模式. js中作用域有两种: 词法作用域 动态作用域 词法作用域 词法作用域指在书写代码时就被确定的作用域.看如下代码 var value = 1; function foo() { console.log(value); } function bar() { var value = 2; foo(); } bar();// 结果是1 动态作用域 动态作用域指在代码运行时才被确定的作用域.js中只有this的作用域是动态作用域 this的五种绑定

Javascript--ECMAScript 之 this

ECMAScript中作用域一般是基于词法作用域是静态的,但是也有一种动态的作用域就是this:  this它不指向函数本事,也不指向函数的作用域 this是在运行的时候绑定的并不是在定义的时候绑定的,它的上下文取决于函数调用时的各种条件.this的绑定和函数声明的位置没有任何关系,只取决于函数的调用方法既是函数的调用位置. 如果要判断一个运行中函数的this的绑定,就需要找到这个函数的直接调用位置.找到后可以运用顺序运用下面的四条规则来判断this的绑定对象 1:有new调用?绑定到新创建的阿

DataGridView只显示数据源中绑定的字段

场景: 由于环境需要,在获取数据源的时候会获取多于DataGridView中绑定的字段,若不做任何处理,直接将数据源绑定到DataGridView上面,DataGridView就会将数据源中没有绑定的字段显示出来,这样就不符合我们的需求了. DataGridView中有一个属性AutoGenerateColumns来控制这种情况. 在绑定数据源之前将AutoGenerateColumns这个属性设为False,DataGridView就不会显示绑定字段以外的字段. 原文地址:https://ww

this的绑定方式

默认绑定 函数调用时绑定window,在严格模式下不会绑定到全局对象 function foo(){ console.log(this.a); } var a = 10; foo(); function foo2(){ "use strict" console.log(this.a); } foo2(); 隐式绑定 将this绑定到上下文对象中 function foo() { console.log( this.a ); } var obj = { a: 2, foo: foo };

js中this的绑定

人们对于this的绑定常常有两个误解,一:指向函数本身,二:指向函数作用域.这两种想法都是错的,this并不指向函数本身,也不指向函数作用域. function foo(){ this.count++; } foo.count = 0; for(var i = 0 ; i<5 ; i++){ foo(); } alert( foo.count ); // 0 因为this不指向函数本身,所以foo.count的值依然是0. function foo(){ var a = 1 ; alert(th