js面向对象第三天

一切对象由函数(构造)创建

----------------------------------------------函数也是对象----------------------------------------

函数也是通过类来创建的,通过Function来创建函数对象

函数是比较特殊的对象,函数的声明是引用数据类型,

--------------------------------------通过Function类创建一个函数-------------------------------

new Function()//可以创建出来的一个匿名对象 

---------------------------------------通过Function类创建对象-------------------------------------

函数是对象,对象是属性的无序集合

常用的属性:arguments,length,name:”anonymous“ 

原型对象上的:apply bind call 

一:CALL方法

------------------------------初步了解call方法--------------------

1)call是函数的原型对象上的方法

扫描二维码关注公众号,回复: 16341854 查看本文章

2)函数.call ,可以把这个函数调用了

3)f.call()f中的this表示window,(括号为空,this指向window)

4)f.call(obj)  f中的this表示obj(括号里面是obj,this就会指向该对象)

要想通过obj调用f函数,怎么做?

方式一:把函数作为obj的属性,挂在obj上。

方式二:要想让这个函数不作为obj的属性。delete obj.该属性

方式三:使用call方法。f.call(obj)(表示让obj去借用f方法,f方法中的this就指向obj)

call方法的深入了解

f.call(obj):

表示两件事:执行f函数,让this的指向是obj

f.call目的是让f执行,并且改变f的this指向,所以说在js中this的指向是动态的,可以通过call进行改变。

// fn() 它里面的this表示window

// fn.call(); // fn中的this表示window

// fn.call(123) // fn中的this表示Number {123}

// fn.call("hello") // fn中的this表示String {"hello"}

// fn.call(true) // fn中的this表示Boolean {true}

// fn.call({}) // {}

//let obj={name:"xxx"}

fn.call(obj)//{name:"xxx"}

深入了解call方法的其他参数

call方法支持传参,从call方法的第二个参数开始就表示参数列表

例如:let r=fn.call(obj,1,2).

console.log(r)

总结:

    1)call是函数原型对象上的属性

     2)任何一个函数都可以.call

     3)当一个函数.call时,这个函数被执行,函数中的this指向call中的第一个实参

4)如果call方法没有实参也能执行,只是函数中的this表示window。

5)如果第一个参数是null,在非严格模式下,函数中的this表示window,严格模式下,表示null

6)函数.call()时,函数肯定会执行,可以给函数传参,从call的第二个参数开始,会传给这个函数。

     

猜你喜欢

转载自blog.csdn.net/zwy1231/article/details/103497801