关于 this指向问题的详解

在这篇文章中主要跟大家简单总结一下js中的this指向问题

JS中, this的值取决于调用的模式, 下面就给大家详细的列举一下

1.所有在全局环境下声明的变量或方法都属于window对象

//1.function声明函数
    var name="李四"
    function fn(){
    console.log(this.name)
    }
//    fn()//window 李四
//2.function 声明函数赋给变量
    var fun = function(name){
    console.log(name)
   }
   fun(‘蜘蛛‘)//window 蜘蛛
// 3.自执行函数
   (function(name){
// console.log(name)
   }(‘赵四‘))//window 赵四

2.方法调用中this的指向

//1.对象方法调用
var obj = {
method: function(fn) {
console.log(fn)
}
};
obj.method(1);
//2.事件绑定
var btn = document.querySelector(‘button‘)
btn.addEventListener(‘click‘,function(){
console.log(this)//btn
})

3.在构造函数中使用(先看谁在调用再判断this指向)

function show(name) {
this.val = name;
};
show.prototype.getVal = function() {
console.log(this.val);
};
var func = new show(1);
func.getVal();
console.log(func.val)

4.可以改变this指向的属 call apply bind

//1.call()
function sayName(name){
console.log(this.name)
}
var name = ‘张三‘
var person1 = {
name:‘李四‘
}
var person2 = {
name:‘王五‘
}
sayName()//张三
sayName.call(person1)//李四
sayName.call(person2)//王五
//2.apply()
sayName.apply(person1,[person1])
sayName.apply(person2,[person2])
//3.bind()方法第一个参数是我们希望函数中this指向的对象,后面是我们希望给函数的参数绑定的值
var person = {
name:‘刘罗锅‘,
age:98,
gender:‘男‘
}
function myName(age,gender){
console.log(this.name,age,gender)
}
var newName = myName.bind(person,78,‘男‘)
newName()
时间: 2024-12-16 18:12:46

关于 this指向问题的详解的相关文章

父类引用指向子类对象详解

父类引用变量引用子类时可以调用子类覆盖的方法. 举个例子: 假设有类Cat,类Dog,类Duck...他们都有一个继承自父类Animal的方法eat(),各自覆盖了这个方法,因为猫狗鸭吃相不同 现在.我有另一类,里面有个方法处理各种动物的吃相all_eat() 当然你可以这么写: // 需要用到某个类型时给其创建对象 public Cat cat = null; public Dog dog = null; public Duck ducl = null; public void all_eat

POSIX 线程详解(经典必看)

总共三部分: 第一部分:POSIX 线程详解                                   Daniel Robbins ([email protected]), 总裁/CEO, Gentoo Technologies, Inc.  2000 年 7 月 01 日 第二部分:通用线程:POSIX 线程详解,第 2部分       Daniel Robbins ([email protected]), 总裁/CEO, Gentoo Technologies, Inc.  20

详解go语言的array和slice 【二】

上一篇  详解go语言的array和slice [一]已经讲解过,array和slice的一些基本用法,使用array和slice时需要注意的地方,特别是slice需要注意的地方比较多.上一篇的最后讲解到创建新的slice时使用第三个索引来限制slice的容量,在操作新slice时,如果新slice的容量大于长度时,添加新元素依然后使源的相应元素改变.这一篇里我会讲解到如何避免这些问题,以及迭代.和做为方法参数方面的知识点. slice的长度和容量设置为同一个值 如果在创建新的slice时我们把

使用LVS实现负载均衡原理及安装配置详解

转:http://www.cnblogs.com/liwei0526vip/p/6370103.html 使用LVS实现负载均衡原理及安装配置详解 负载均衡集群是 load balance 集群的简写,翻译成中文就是负载均衡集群.常用的负载均衡开源软件有nginx.lvs.haproxy,商业的硬件负载均衡设备F5.Netscale.这里主要是学习 LVS 并对其进行了详细的总结记录. 一.负载均衡LVS基本介绍 LB集群的架构和原理很简单,就是当用户的请求过来时,会直接分发到Director

DNS服务相关概念详解

实验环境:RHEL 32Bit DNS服务相关概念详解 DNS是一种域名解析服务,DNS服务的核心以及DNS服务的标准都是基于一个软件来实现的,这个软件叫做BIND(Berkeley Internet Name Domain),互联网上几乎所有的DNS服务都是由BIND来构建的,虽然也有其它的DNS服务构建标准,但是它们的使用语法以及工作机制都和BIND非常接近. ·Linux服务器和Windows服务器的比较 Linux服务器在没有SELinux的时候它的安全级别和Windows服务器的安全级

[gitbook] Android框架分析系列之Android Binder详解

请支持作者原创: https://mr-cao.gitbooks.io/android/content/android-binder.html Android Binder详解 Table of Contents 1. binder简介 2. binder的实现 2.1. IBinder类简介 2.2. IInterface类简介 2.3. BpBinder和BBinder简介 2.4. ProcessState和IPCThreadState简介 2.5. ServiceManager简介 2.

WebView使用详解(三)——WebChromeClient与LoadData补充

前言: 我不会忘了我 忘了我曾说过一定会得到的梦想 --<老大>小柯 相关文章 1.<WebView使用详解(一)--Native与JS相互调用(附JadX反编译)> 2.<WebView使用详解(二)--WebViewClient与常用事件监听> 一.WebChromeClient 1.概述 (1). 与WebViewClient的区别 很多同学一看到这里有Chrome,立马就会想到google 的Chrome浏览器:这里并不是指Chrome浏览器的意思,而是泛指浏览

Android触摸屏事件派发机制详解与源码分析二(ViewGroup篇)

1 背景 还记得前一篇<Android触摸屏事件派发机制详解与源码分析一(View篇)>中关于透过源码继续进阶实例验证模块中存在的点击Button却触发了LinearLayout的事件疑惑吗?当时说了,在那一篇咱们只讨论View的触摸事件派发机制,这个疑惑留在了这一篇解释,也就是ViewGroup的事件派发机制. PS:阅读本篇前建议先查看前一篇<Android触摸屏事件派发机制详解与源码分析一(View篇)>,这一篇承接上一篇. 关于View与ViewGroup的区别在前一篇的A

Java虚拟机(JVM)中的内存设置详解

在一些规模稍大的应用中,Java虚拟机(JVM)的内存设置尤为重要,想在项目中取得好的效率,GC(垃圾回收)的设置是第一步. PermGen space:全称是Permanent Generation space.就是说是永久保存的区域,用于存放Class和Meta信息,Class在被Load的时候被放入该区域Heap space:存放Instance. GC(Garbage Collection)应该不会对PermGen space进行清理,所以如果你的APP会LOAD很多CLASS的话,就很