概述
1.函数模式:this指向的是window全局对象
function
test
(){
}
test
()
;
2.方法模式:this指向的是调用这个方法的对象
var
obj = {
test
:
function
(){
}
}
;
obj.
test
()
;
3.构造函数模式:this指向的是使用new创建出来的对象
function
Person
(){
}
var
obj =
new
Person
()
;
(1)构造函数调用模式的特征
·构造函数的首字母要大写
·一般情况下和new关键字一起使用
·构造函数中的this指向的是new关键字创建出来的对象
·默认返回new创建出来的这个对象,若是值类型的数据则没有影响;若是对象类型则返回这个对象,不会返回原来创建出来的对象
(2)工厂模式的构造函数
·简单工厂模式的构造函数创建出来的对象跟该构造函数无关
·简单工厂模式的构造函数实际的调用模式是函数模式
function
Person
(name
,
age){
var
o = {
name
:name
,
age
:age
,
sayHello
:
function
(){
}
}
;
return
o
;
}
var
p =
new
Person
(
"张三"
,
18
)
;
console
.
log
(p)
;
(3)寄生式构造函数
function
Person
(name
,
age){
var
o = {
name
:name
,
age
:age
,
sayHello
:
function
(){
}
}
;
return
o
;
}
var
p =
new
Person
()
;
4.上下文模式:其实就是一个执行环境,这里的执行环境指的就是this(如果是在全局环境下这个this指的就是window,执行环境就是window;如果是在一个对象的调用下去执行,this指的就是这个对象)
(1)在上下文调用模式中可以修改this的值(也就是可以修改函数的调用方式)
·apply:函数.apply(对象,[函数需要的参数列表,是一个数组]这里的[]表示的是可有可无的意思),用于函数的形参个数确定/不确定的情况
·call :函数.call(对象,[arg1],[arg1],[arg3]...[argn]这里的[]表示的也是可有可无的意思,不是数组),用于确定了函数的形参个数确定的情况
注意:
·apply和call的相同点
·第一个参数都是要把this修改成对象
·第一个参数传递null的时候都表示函数调用模式(也就是将this指向window)
·apply和call的不同点:当函数需要参数的时候,apply是用数组进行参数的传递,call是用单个的参数传递
(2)apply补充
var
obj = {
//伪数组
0
:
"abc"
,
1
:
"def"
,
2
:
"hig"
,
length
:
3
}
;
var
arr = [].
concat
.apply([]
,
obj)
;
//把obj和[]空数组拼起来然后返回给arr
console
.
log
(arr)
;
function
test
(){
console
.
log
(
this
)
;
}
test
.
apply
(
1
)
;
test
.
apply
(
"abc"
)
;
test
.
apply
(
true
)
;
test
.
apply
(
window
)
;
//当使用call、apply传入的第一个参数为值类型时会将值类型转换成对应的对象(也就是对应的引用类型),然后赋值给this
//的那个传入的第一个参数为null/undefined的时候会把this赋值为window
//借用构造函数实现继承
function
Person
(){
this
.
name
=
"张三"
;
this
.
age
=
18
;
}
function
Student
(){
Person
.
apply
(
this
)
;
}
var
stu =
new
Student
()
;
console
.
log
(stu)
;
//打印出来的就是张三、18
最后
以上就是活力水壶为你收集整理的js高级——函数的四种调用模式的全部内容,希望文章能够帮你解决js高级——函数的四种调用模式所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复