js---13 this call apply

<script type="text/javascript">
//this:this可以写在js全剧环境中(全局环境中this是window对象),this可以写在函数中,可以写在对象中,
function f(){
     this.name = "asdfas";
}
var o ={
    name :"cj",
     print:function(){
        console.log(this.name);
    }
};
o.print();//cj
var f = o.print();//java的内存分析模型来分析js内存模型。函数是函数对象,f就指向print指向的函数对象,
f();//undefined,
/*this是运行时决定不是代码写的时候决定,this写在函数中,哪个对象调用函数,这个对象就看成这个函数类的实例化对象,this就指向那个对象,  f() === window.f(),所以未定义。
*/

var ele = document.getElementById("id");
ele.addEventListener("click",function(){
    console.log(this);//this永远指向dom元素,就是引发事件的对象,
})

//call,apply都是函数对象有的,动态改变函数调用的对象
function log(a){
    console.log(this[a]);
}
log("name");  //this是window对象,global
log.call(o,"name");//cj,相当于o.log("name"),不让window调用log函数让o来调用log函数,call方法第一个参数是要调用这个函数的对象,第二个是参数。

function log(a,b){
     console.log(this[a]);//通过中括号访问函数对象的成员属性,
     console.log(this[b]);
}
log("name","");
log.apply(o,"name","age");
log.apply(o,["name","age"]); //apply接受参数是数组,call是一个一个传递

log.call(this,)  == this.log()

function p(){
    this.name = "111";//函数的this是调用这个函数的对象
}
var o ={};
p.call(o);//相当于o.p(),调用函数看成是类的构造器执行了,那么此时o就是函数这类的实例化对象,就有了这个类的属性了,this就指向o,
console.log(o.name); // 111

  function Person(name,age){
      this.name =  name;
      this.age = age;
  }
  var p1  = new Person   ("cj",22);//new出来的,当然p1就是这个函数类的实例化对象
  console.log(p1 instanceof Person); //true

  //自定义new
  function New(f){ //f 是个函数。f 构造器函数
      var o = {"__proto__":f.prototype}; //o.__proto__ 指向函数f的prototype
      return function(){//返回函数,可以不写形参,
          //o.name = arguments[0];
        //o.age = arguments[1];
          f.apply(o,arguments);//o调用f,类的构造器执行,那么o就是函数f的实例化对象了,就有了这个类的属性和值

          return o;//函数执行时返回o对象
      }
  }
  var p2 = New(Person)("xx",33);//New(Person)返回函数,("xx",33)函数执行返回o
  console.log(p2.name);//xx
  console.log(p2 instanceof Person);//true

</script>
时间: 2024-10-26 11:29:08

js---13 this call apply的相关文章

js中call、apply和bind的区别

前言 关于js中call.apply和bind这三者的区别,这应该是一个老生常谈的问题,也是前端面试时经常会遇到的一道题目,因此也抽空把它理一遍. 作用 call.apply和bind都是一个javascript中的方法,他们的共同作用就是改变函数执行时的上下文,即改变函数执行时this的指向.我们来看下面的例子: 1 function Animal(name) { 2 this.name = name; 3 } 4 Animal.prototype.getName = function() {

js如何是利用apply实现继承

js如何是利用apply实现继承:javascript是一种面向对象的语言,当然继承是它的重要特征之一,比如常规的可以使用原型实现继承,不过使用apply可是可以实现继承的,下面就通过代码实例介绍一下,关于apply函数这里就不介绍了,具体可以参阅javascript的call()和apply()的作用和区别一章节. 下面看代码实例: function Parent(username){ this.username=username; this.sayHello=function(){ aler

js继承之call,apply和prototype随谈

在js中,call,apply和prototype都可以实现对象的继承,下面我们看一个例子: function FatherObj1() { this.sayhello = "I am join"; this.show = function () { alert("I am FatherObj1"); }; this.getall = function () { if (arguments) alert("GetAll:" + arguments

js中 call 和 apply

call方法: 语法:call([thisObj[,arg1[, arg2[,   [,.argN]]]]]) 定义:调用一个对象的一个方法,以另一个对象替换当前对象. 说明: call 方法可以用来代替另一个对象调用一个方法.call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象. 如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj. apply方法: 语法:apply([thisObj[,argArray]]) 定义:应用某

js中call,apply,bind的实现原理()

/* author:yangJian */ // js中call,apply,bind的实现原理() // 三者的区别,都是改变this指针,call和apply主要是参数区别,bind返回的是一个函数体,而call和apply是立即执行 // call的实现 function fn1 (str1,str2,str3){ console.log(this,str1,str2,str3); } function fn2(){ } Function.prototype.call = function

(转)js的call和apply

1.方法定义 call方法: 语法:call([thisObj[,arg1[, arg2[,   [,.argN]]]]]) 定义:调用一个对象的一个方法,以另一个对象替换当前对象. 说明: call 方法可以用来代替另一个对象调用一个方法.call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象. 如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj. apply方法: 语法:apply([thisObj[,argArray]])

JS的call与apply

在javascript中有两个方法call和apply, 这两个方法一般在js框架设计中用的比较多,比如jQuery Code. 那么,这两个方法是做什么的呢,ECMA的解释太抽象,直接看代码: 1 function f(){ 2 console.log(this.name); 3 } 4 5 var obj = {}; 6 obj.name = "obj"; 7 8 f.call(obj); //obj 我们分析一下f, f 中输出了this.name, 这里的this指的是函数在运

面向对象的js编程 Call和apply方法

JavaScript中有一个call和apply方法,其作用基本相同,但也有略微的区别. 一.方法定义 1.call 方法 语法:call([thisObj[,arg1[, arg2[, [,.argN]]]]]) 参数 thisObj  可选项.将被用作当前对象的对象. arg1, arg2,  , argN 可选项.将被传递方法参数序列. 说明 call 方法可以用来代替另一个对象调用一个方法.call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象.  

js的call()和apply()方法的学习

1.方法定义 call方法: 语法:call([thisObj[,arg1[, arg2[,   [,.argN]]]]]) 定义:调用一个对象的一个方法,以另一个对象替换当前对象. 说明: call 方法可以用来代替另一个对象调用一个方法.call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象. 如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj. apply方法: 语法:apply([thisObj[,argArray]])

js基础篇——call/apply、arguments、undefined/null

a.call和apply方法详解 call方法: 语法:call([thisObj[,arg1[, arg2[,   [,.argN]]]]]) 定义:调用一个对象的一个方法,以另一个对象替换当前对象. 说明: call 方法可以用来代替另一个对象调用一个方法.call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象.如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj. apply方法: 语法:apply([thisObj[,ar