一个js的apply问题,this为什么不是指向sum1而是window

问题描述

一个js的apply问题,this为什么不是指向sum1而是window

var m=1;
function sum () {
alert(this.m);
}
sum(); //1
function sum1() {

sum.apply(this);

}
sum1(); //1
sum.apply(this)明明在sum1对象里面调用的,this应该指向sum1啊,为什么指向的是window?

解决方案

sum1是一个函数不是一个对象,它没有this的。this是“本对象”不是“本函数”

解决方案二:

任何时候this都不会指向sum1,除非sum1是一个对象,在它的成员函数内使用。

解决方案三:

你sum1里面的this对象就是window,apply后this不是window是什么。。

解决方案四:

当函数直接被调用的时候,如sum(),它就是一个函数,和对象什么的无关,它的作用域链就是其运行环境的作用域链,这个例子中sum1()作为函数执行的时候,它的外层没有写在哪个作用域链中,姑且认为是window吧,sum1()中的sum在执行的时候,作用域就是sum1的外部作用域加上sum1函数内的局部作用域.所以自然就是外层的m了.函数是对象,是指这样用:var a={fun1:function(){return 123;}},其中fun1和{fun2:123}中的fun2的级别是一样的,都是一个属性,js的对象的属性是什么,就是六种基本类型,fun1是基本类型中的Object类型,这样说明白吗?

时间: 2024-12-02 22:28:23

一个js的apply问题,this为什么不是指向sum1而是window的相关文章

在定义一个js类的时候,为什么要设置该类的prototype属性为它所要继承的类的

在定义一个js类的时候,为什么要设置该类的prototype属性为它所要继承的类的实例对象 在写JavaScript类定义的时候,大家很可能都写过下面的代码: function A() {} function B() {} B.prototype = new A() 上面这样写是为了让instanceof语句能起作用.举个例子: 1.不重写子类的prototype属性 b = new B(); b instanceof B //return true b instanceof A // retu

一个JS的日期格式化算法示例

本文为大家介绍下一个JS的日期格式化算法,具体实现如下,感兴趣的朋友可以参考下,希望对大家有所帮助   复制代码 代码如下: function dateFormat(date, format) { var o = { "M+": date.getMonth() + 1, //month "d+": date.getDate(), //day "h+": date.getHours(), //hour "m+": date.ge

setTimeout自动触发一个js的方法

 本文为大家介绍下使用setTimeout自动触发一个js,具体实现如下,喜欢的朋友可以学习下  代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  <html xmlns="http://www.w3.org/1999/xhtml&q

javascript 基础篇1 什么是js 建立第一个js程序_基础知识

javascript是一个基于对象和事件驱动,并且具有安全性的脚本语言,应用很广泛,不仅仅是网页,不要被jsp给困住. 基于对象,就是不需要指定变量的类型,你给他一个3,它知道是整型,如果给赋值'3',它就知道是char. 事件驱动,就是单击啊,之类的事件进行驱动. javascript优点:网页互动性强,简单易用.js主要是基于客户端运行,很大程度上减少了服务器的负荷. javascript是脚本编程语言:采用程序段方式实现,与HTML结合,java的编译器其实就是浏览器本身. 安全性:HTM

js 轮播-一个js轮播器,可以用用但是性能差

问题描述 一个js轮播器,可以用用但是性能差 html------------------------ <!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <link rel="stylesheet" href="style/main.cs

js-自己写一个JS树形插件

问题描述 自己写一个JS树形插件 哪位大神写过js树形插件啊,支持多选框的,或者求给下思路,谢谢! 网上的那些插件主要不是很美观,现在要bootsrap,html5的那种风格 解决方案 ztree就可以,你可以按这个写一个

DOM对象本身也是一个js对象,所以严格来说,并不是操作这个对象慢,而是说操作了这个对象后,会触发一些浏览器行为(转)

一直都听说DOM很慢,要尽量少的去操作DOM,于是就想进一步去探究下为什么大家都会这样说,在网上学习了一些资料,这边整理出来. 首先,DOM对象本身也是一个js对象,所以严格来说,并不是操作这个对象慢,而是说操作了这个对象后,会触发一些浏览器行为,比如布局(layout)和绘制(paint).下面主要先介绍下这些浏览器行为,阐述一个页面是怎么最终被呈现出来的,另外还会从代码的角度,来说明一些不好的实践以及一些优化方案. 浏览器是如何呈现一张页面的 一个浏览器有许多模块,其中负责呈现页面的是渲染引

有没有一个js写的图片截图插件

问题描述 有没有一个js写的图片截图插件 求一个js写的图片截图插件,兼容ie8,ie9,实现无刷新上传, 解决方案 http://deepliquid.com/content/Jcrop.html 实现图片区域截取的,无刷新直接将选中的图片提交到iframe来上传就行了.ie10+才支持html5的formdata,可以用ajax来实现上传

请教一个JS加密解密的问题

问题描述 请教一个JS加密解密的问题 JS代码片段如下: var _0x4158 = ["scrollTop", "he................ function _0x5ba4x1(_0x5ba4x2) { var _0x5ba4x3 = $(window)[_0x4158[0]](); var _0x5ba4x4 = _0x5ba4x3 + $(window)[_0x4158[1]](); var _0x5ba4x5 = $(_0x5ba4x2)[_0x4158[