对于JavaScript中this关键字的理解
这是我第二遍学this了,第一遍学的懵懵的。this指哪里都是凭我一个男人的直觉然后控制台输出看看对不对。
刚查了书、博客、视频。理解差不多了。毕竟菜鸡me;
一、首先介绍下什么是this
this是一个标识符,它需要和值进行绑定,和变量差不多;但是在你的代码中,它不是和某个具体的值进行绑定。而是绑定到正确的对象上,一般来说参数究竟绑定在哪个对象上都是由定位函数参数规则所决定的。
二、this对象是在运行时基于函数的执行环境绑定的,当函数被作为某个对象的方法调用时,this等于那个对象。
代码一
var name = "全局";
var obj = {
name : "object",
getNameFunc : function() {
console.log(this.name);
}
};
obj.getNameFunc();

三、相同的在全局函数是this就是window;但是匿名函数的执行环境的执行环境具有全局性所以代码2就有的解释啦
代码二
var name = "全局";
var obj = {
name : "object",
getNameFunc : function() {
return function(){
console.log(this.name);
};
}
};
obj.getNameFunc() ();

四、在JavaScript高程中作者说每个函数在调用时都会自动取得两个变量:this和argutments。内部函数在搜索这两个变量时,只会搜索到其活动对象为止。因此永远不可能直接访问外部函数的这两个变量。把外部作用域中的this对象保存在一个闭包能访问到的地方;如代码三
代码三
var name = "全局";
var obj = {
name : "object",
getNameFunc : function() {
var biubiu =this;
return function(){
console.log(biubiu.name);
};
}
};
obj.getNameFunc() ();

五 ;总结
关键词this使得我们可以仅创建一个函数对象,就可以将其作为方法用在一些其他的对象上,每次我们调用该方法时它便可以调用他的对象。对于节省内存十分有用。
这都是因为this得以实现。(我也不大懂Twitter前培训主管视频中看到的。)
六、练习
预测this
var fn = function(one, two){
log(this, one, two);
};
var r ={ }, g = {}, b = {};
r.method = fn;
r.method(g,b);
答案是: r 对象。g,b 是one ,two。没疑问吧。r点method 这个是对象吧。对象this
当函数被作为某个对象的方法调用时,this等于那个对象。
var fn = function(one, two){
log(this, one, two);
};
var r ={ }, g = {}, b = {};
r.method = fn;
fn(g,b);
答案是全局:因为这次不是作为函数调用
var x = "我是全局变量"; //定义全局变量x
function a(){ //定义函数类结构a
this.x = "我是在函数类结构a中声明的哦";
}
//定义普通函数,弹出当前指针所包含的变量x的值
function f(){
alert (this.x);
} f.call(new a());
call()的官方解释,“调用一个对象的一个方法,以另一个对象替换当前对象。”,
f.call(new a())就是把函数(其实也是对象)f复制到被调用对象“new a()”下面去解析.我的理解是还没细细研究。
new 这个我还没学到。
关键在于this,对,关键还是在于this的作用域。this的作用域不是定义它的函数的作用域,而是执行时的作用域。
对于JavaScript中this关键字的理解的更多相关文章
- JavaScript中this关键字的使用比较
JavaScript中this关键字的使用比较 this关键字在JavaScript中,用的不能说比较多,而是非常多.那么熟悉this关键字的各种用法则显得非常关键. this有时候就是我们经常说的上 ...
- 深入解析Javascript中this关键字的使用
深入解析Javascript中面向对象编程中的this关键字 在Javascript中this关键字代表函数运行时,自动生成的一个内部对象,只能在函数内部使用.比如: function TestFun ...
- [No000069]Javascript中this关键字详解
Quiz 请看下面的代码,最后alert出来的是什么呢?(chrome下按F12,选择Console直接复制粘贴运行) var name = "Bob"; var nameObj ...
- 大前端学习笔记整理【五】关于JavaScript中的关键字——this
写在前面 工作有那么一段时间了,但是在工作中,发现自己的理论知识还是有所欠缺.特别是在javascript上,很多东西其实自己属于知道要用这个,但是不知道为什么要这么用...这种情况很是尴尬了,所以写 ...
- javascript中this关键字详解
不管学习什么知识,习惯于把自己所学习的知识列成一个list,会有助于我们理清思路,是一个很好的学习方法.强烈推荐. 以下篇幅有点长,希望读者耐心阅读. 以下内容会分为如下部分: 1.涵义 1.1:th ...
- javascript中new关键字详解
和其他高级语言一样 javascript 中也有 new 运算符,我们知道 new 运算符是用来实例化一个类,从而在内存中分配一个实例对象. 但在 javascript 中,万物皆对象,为什么还要通过 ...
- javascript中变量提升的理解
网上找了两个经典的例子 var foo = 1; function bar() { if (!foo) { var foo = 10; } alert(foo); } bar(); // 10 var ...
- javascript中concat方法深入理解
最近在恶补js知识的时候,总是会因为js强大的语法而感到震撼.因为以前对前端方面的疏忽,导致了一些理解的错误.因此痛改前非,下定决心,不管做什么事情,都要有专研的精神. 在介绍前,抛出一个问题:如何将 ...
- JavaScript中var关键字的使用详解
作用 声明作用:如声明个变量. 语法 ? 1 var c = 1; 省略var 在javascript中,若省略var关键字而直接赋值,那么这个变量为全局变量,哪怕是在function里定义的. ? ...
随机推荐
- PHP安装phpredis扩展
phpredis 的github地址:https://github.com/nicolasff/phpredis第一步:切换到指定的目录,然后wget https://github.com/nicol ...
- JS组件系列——自己动手扩展BootstrapTable的 冻结列 功能:彻底解决高度问题
前言:一年前,博主分享过一篇关于bootstrapTable组件冻结列的解决方案 JS组件系列——Bootstrap Table 冻结列功能IE浏览器兼容性问题解决方案 ,通过该篇,确实可以实现bo ...
- 【LeetCode】232. Implement Queue using Stacks
题目: Implement the following operations of a queue using stacks. push(x) -- Push element x to the bac ...
- 【Android Developers Training】 104. 接受地点更新
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- Spring 学习一
Spring工作机制及为什么要用? 1.springmvc将所有的请求都提交给DispacherServlet,他会委托应用系统的其他模块负责对请求进行真正的处理工作. 2.DispacherServ ...
- [转]ubuntu搭建LAMP环境
首先下载安装apache2 输入:sudo apt-get install apache2 安装完毕后,在浏览器中输入:localhost 可以看到apache的默认主页 紧接着安装php5 输入:s ...
- ionicangular 成长日记
//首先配置文件ionic.bundle.min.jsionic.min.css" //创建一个angular控制器,控制器给body/html都可以angular.module('myap ...
- 单例设计模式 Single
一些人总结出来用来解决特定问题的固定的解决方案. 解决一个类在内存中只存在一个对象,想要保证对象的唯一. 1 为了避免其他程序过多的建立该类对象.禁止其他程序建立该类对象. 2 为了其他程序可以访问该 ...
- mybatis代理类Demo
前言 简单实现通过代理接口来实现对数据的查询demo,也是对mybatis的一个熟练.首先是编写接口代理. public interface IBookMapper { List<BookMod ...
- php之试触法----error--关键字的误用
实际开发中,在不同网页的输出中,常常有许多公共的代码或者变量需要使用,于是定义了以下类来缩减代码量 如下代码所示: <?php class universalClass { function w ...