Web前端开发this之详解

前端微信扫码支付开发
前端如何开发微信公众号的页面
微信公号前端开发

this的四种调用方式:
1.普通函数来调用
this的值指向->window
准确的说this为null,但被解释为window
在ECMAscript5标准中,如果this为null,则被解释为undefined。
javascript 代码

alert(window.x)
function t() {
    this.x = 333
}
t()
alert(window.x)

2.作为对象的方法来调用
this指向方法的调用者,即母体对象。
javascript 代码

var obj = {
    xx: 999,
    yy: 888,
    t: function() {
        alert(this.xx)
    },
}
obj.t() //999
var dog = { xx: ‘wangwang’ }
dog.t = obj.t
dog.t() //wangwang
show = function() {
    alert(this.xx)
}
dog.t = show
dog.t() //wangwang

3.函数作为构造函数调用时
js中没有类的概念,创建对象使用构造函数来完成的,或者直接用json格式{}来写。
javascript 代码

function Dog(name, age) {
    this.name = name
    this.age = age
    this.back = function() {
        alert(‘This is ‘ + this.name + ‘!’)
    }
}
var dog = new Dog(‘huzi’, 2)
dog.back()

new Dog 发生了以下几个步骤:
a:系统创建空对象{},(空对象constructor的属性指向Dog函数,)
b:把函数的this指向该空对象Dog
c: 执行该函数
d:返回该对象

下面的代码运行结果返回的是什么?
javascript 代码

function Pig() {
    this.age = 99
    return ‘abc’
}
var pig = new Pig()
console.log(pig)

答:返回pig对象,因为函数作为构造函数运行时,return的值是忽略的,还是返回对象。

4.函数通过call,apply调用时
语法格式:函数.call(对象,参数1,参数2···参数n);
javascript 代码

function t(num) {
    alert(‘我的真实年龄是’ + this.age)
    alert(‘但我一般告诉别人我’ + (this.age + num))
}
var humen = { name: ‘yike’, age: 23 }
humen.t = t
humen.t(-10) //this指向humen,但是humen多了一个方法属性
//接下来,我们不把t赋值给humen的属性,也能把this指向humen。
var wangwu = { name: ‘wangwu’, age: 30 }
t.call(wangwu, 5)

fn.call(对象,参数1,参数2···参数n);运行如下:
a:fn函数中的this指向对象obj
b:运行fn(参数1,参数2···参数n);

总结

this的指向:
1.普通函数中的this指向全局对象window
2.构造函数内部this指向新创建出来的对象
3.对象方法内的this指向的是调用该方法的对象
4.call,apply,bind可以改变this的指向

微信小程序的前端开发
h5微信支付前端开发教程
微信开发 前端 后端
赞(0)
前端开发者 » Web前端开发this之详解
64K

评论 抢沙发

评论前必须登录!