关于jscall源码的信息

本文目录一览:

请教一个js函数里面的call方法

亲,call方法:

语法:call([thisObj[,arg1[, arg2[, [,.argN]]]]])

定义:调用一个对象的一个方法,以另一个对象替换当前对象。

说明:

call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。

如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。

看看下面的例子你就明白为什么那里没有执行:

function add(a,b)

{

alert(a+b);

}

function sub(a,b)

{

alert(a-b);

}

add.call(sub,3,1);

这个例子中的意思就是用 add 来替换 sub,add.call(sub,3,1) == add(3,1) ,所以运行结果为:alert(4); // 注意:js 中的函数其实是对象,函数名是对 Function 对象的引用。

js读取远程网页源码

代码如下:

!DOCTYPE html PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”

html

head

meta http-equiv=”Content-type” content=”text/html; charset=utf-8″

title远程网页源代码读取/title

style type=”text/css”

/* 页面字体样式 */

body, td, input, textarea {

font-family:Arial;

font-size:12px;

}

/style

script type=”text/javascript”

//用于创建XMLHttpRequest对象

function createXmlHttp() {

//根据window.XMLHttpRequest对象是否存在使用不同的创建方式

if (window.XMLHttpRequest) {

xmlHttp = new XMLHttpRequest(); //FireFox、Opera等浏览器支持的创建方式

} else {

xmlHttp = new ActiveXObject(“Microsoft.XMLHTTP”);//IE浏览器支持的创建方式

}

}

//直接通过XMLHttpRequest对象获取远程网页源代码

function getSource() {

var url = document.getElementById(“url”).value; //获取目标地址信息

//地址为空时提示用户输入

if (url == “”) {

alert(“请输入网页地址 。”);

return;

}

document.getElementById(“source”).value = “正在加载……”; //提示正在加载

createXmlHttp(); //创建XMLHttpRequest对象

xmlHttp.onreadystatechange = writeSource; //设置回调函数

xmlHttp.open(“GET”, url, true);

xmlHttp.send(null);

}

//将远程网页源代码写入页面文字区域

function writeSource() {

if (xmlHttp.readyState == 4) {

document.getElementById(“source”).value = xmlHttp.responseText;

}

}

/script

/head

body

h1远程网页源代码读取/h1

div

地址:input type=”text” id=”url”

input type=”button” onclick=”getSource()” value=”获取源码”

/div

textarea rows=”10″ cols=”80″ id=”source”/textarea

/body

/html

js中的call

java中对象包含属性和方法, 方法即函数, 只有对象可以调用方法

但是js中一切皆对象, 函数是对象, 函数也可以调用方法

Function.prototype.call

Function.prototype.apply

Function.prototype.bind

Function.prototype.toString

为什么js语言会在function原型上挂上这四个函数?

因为好处太多了, 现在我就说一说call的应用

再深入思考一下, call语法是基于什么形成的呢 ?

了解底层语法有助于我们理解高级的语法

因为在底层的语法眼中, 高级语法只不过是工具, 根本不算语法, 不过是由我定义构建处理来的

理解call函数, 核心必要知识

哈哈哈, v8内部的不知道, 反正js基于现有语法就有这个能力 (还有解法, 基于 proto ,原型链的方式, var temp = Object.create(null)), 利用干净的地方, 防止覆盖原对象的函数

显然, 我们自己的上面的mycall还要很多问题

这里我们就实现了自己的call, 以后看见call就知道都不过是些雕虫小技了(当然真实的实现方式肯定需要考虑更多因素和性能, 而且在v8更大的环境下, 可能还不止一种实现方式,保持谦虚)

js call 函数问题

call函数是就来纠正this指针的。

直接写var args=Array.prototype.slice(arguments,1,2)的话,在slice这个函数里面,this指针指向的是testFunction这个函数的包含体,但是用call的话,slice函数里面,this指针就指的是arguments这个对象了。

JS中关于call()方法的一个问题,如图中所示,求高手详解。

在分析这四种代码前,首先得弄清楚,如果一个对象obj调用了f函数,这个obj会发生什么样的变化。

obj.f();

上面的代码中对象obj调用了f函数,在f函数里,第一句是this.a = ‘A’。那么这个this是指什么?如果你不清楚,那我直接说好了。this就是只那个调用f函数的对象,显然在这里是obj。那么this.a = ‘A’实际上就是obj.a = ‘A’,也就是说,obj多了一个属性a,其值为A。同样的道理,第二句代码给obj添加了一个属性b,其值是一个函数,alert出一个B。

明白了吗?obj.f()的直接影响就是obj.a = ‘A’,obj.b = function(){alert(‘B’)}。

弄明白了obj.f()的影响,接下来要搞清楚的就是f.call(obj)是一种怎么样的调用。如果你了解call这个函数,你可以知道的更多些;如果你不了解,希望你自己去仔细研究下,我这里只能直接告诉你:

f.call(obj)相当于obj.f()

看到了吗,这就是为什么要先讲清楚obj.f()的影响。因为f.call(obj)其实就是obj.f()。

此时再来看这四种调用。

第一种:

首先来看看第一句,根据前面的分析,我们知道,此时e.a = ‘A’。那么第二句干了什么呢?第二句alert(a),显然这a和e是没有关系的,由于变量a事先没有定义,在js中不能直接使用未定义的变量,alert(a)其实出错了,所以你没有看到任何反应。但如果你使用开发者工具,就能看到,这样的写法已经报错了。错误的代码,自然没有任何反应。

第二种:

第二种比较绕,还是来看看它的调用过程吧。f.call(e.t),这个e.t是什么?因为e没有t这个属性,所以这句相当于f.call(undefined)。当call函数的第一个参数是undefined或者null时,f.call(undefined)就相当于f(),也相当于window.f()。那么根据开头的分析,这时f函数的调用者就是window了,也就是说window.a =’ A’了。第二句alert(a),显然在函数e的作用域里,变量a是不存在的,所以js会到window的作用域去查找属性a,而window的属性a是有的,它的值是A,所以这个时候alert(a)就是alert(window.a),alert的结果就是A。

第三种:

我觉得看了前两种调用的分析,你应该知道f.call(y.t)相当于什么,它相当于y.t.f(),但遗憾的是,y这个变量并没有定义,无论是在函数e的作用域内还是window的作用域内,y都是不存在的,而使用一个未定义的变量,是一种错误的语句,所以带三种调用和第一种一样,是错了,alert(a)根本就没有执行,因此没有任何反应;当然,就算执行了alert(a)也是错的,它和第一种调用的错误就一样了。

第四种:

第四种应该是比较容易理解的了。根据开头的分析,f.call(e),e.a = ‘A’,这个没有意见吧?所以第二句alert(e.a)就alert出了A。

对于javascript 中的call函数的理解问题

标准解释:call方法是将一个对象的方法在另一个对象的上下文环境中执行。

详细解释:你的例子中,myFun.call(myObject, 13, 3, 95)执行时是这样的:

1. 调用myFun函数

2. 将13,3,95三个参数传递给它(你的myFun方法中没有处理这些参数的代码,所以传了也没有用)

3. 将myFun函数中的所有this用myObject代替(同样,你的myFun函数中没有使用this,所以执行结果和直接调用myFun()是一样的)

修改一下你的例子,帮助你理解:

function myFun(p1, p2, p3)

{

this.para1 = p1;

this.para2 = p2;

this.para3 = p3;

}

var myObject = new Object();

alert(myObject.para1) //显示undefined

myFun.call(myObject,13,3,95); /*执行的时候,myFun方法中的this全部用myObject对象代替,所以在这个例子中,执行myFun方法和直接写下面的语句效果是一样的:

myObject.para1 = 13;

myObject.para2 = 3;

myObject.para3 = 95;

*/

alert(myObject.para1) //显示13

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/241817.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-12 12:43
下一篇 2024-12-12 12:44

相关推荐

  • 云智直聘 源码分析

    本文将会对云智直聘的源码进行分析,包括前端页面和后端代码,帮助读者了解其架构、技术实现以及对一些常见的问题进行解决。通过本文的阅读,读者将会了解到云智直聘的特点、优势以及不足之处,…

    编程 2025-04-29
  • Java 监控接口返回信息报错信息怎么处理

    本文将从多个方面对 Java 监控接口返回信息报错信息的处理方法进行详细的阐述,其中包括如何捕获异常、如何使用日志输出错误信息、以及如何通过异常处理机制解决报错问题等等。以下是详细…

    编程 2025-04-29
  • 使用Python爬虫获取电影信息的实现方法

    本文将介绍如何使用Python编写爬虫程序,来获取和处理电影数据。需要了解基本的Python编程语言知识,并使用BeautifulSoup库和Requests库进行爬取。 一、准备…

    编程 2025-04-28
  • Python网站源码解析

    本文将从多个方面对Python网站源码进行详细解析,包括搭建网站、数据处理、安全性等内容。 一、搭建网站 Python是一种高级编程语言,适用于多种领域。它也可以用于搭建网站。最常…

    编程 2025-04-28
  • Python爬取网页信息

    本文将从多个方面对Python爬取网页信息做详细的阐述。 一、爬虫介绍 爬虫是一种自动化程序,可以模拟人对网页进行访问获取信息的行为。通过编写代码,我们可以指定要获取的信息,将其从…

    编程 2025-04-28
  • 如何使用Python执行Shell命令并获取执行过程信息

    本文将介绍如何使用Python执行Shell命令并获取执行过程信息。我们将从以下几个方面进行阐述: 一、执行Shell命令 Python内置的subprocess模块可以方便地执行…

    编程 2025-04-28
  • 源码是什么

    源码是一段计算机程序的原始代码,它是程序员所编写的可读性高、理解性强的文本。在计算机中,源码是指编写的程序代码,这些代码按照一定规则排列,被计算机识别并执行。 一、源码的组成 源码…

    编程 2025-04-27
  • Python实现身份信息模拟生成与查验

    本文将从以下几个方面对Python实现身份信息模拟生成与查验进行详细阐述: 一、身份信息生成 身份信息生成是指通过代码生成符合身份信息规范的虚假数据。Python中,我们可以使用f…

    编程 2025-04-27
  • Go源码阅读

    Go语言是Google推出的一门静态类型、编译型、并发型、语法简单的编程语言。它因具有简洁高效,内置GC等优秀特性,被越来越多的开发者所钟爱。在这篇文章中,我们将介绍如何从多个方面…

    编程 2025-04-27
  • Dapper使用getschema获取表信息

    本文旨在介绍Dapper中使用getschema获取表信息的方法和注意事项。 一、获取某张表的所有列信息 使用Dapper获取某张表信息,可以使用 `IDbConnection.G…

    编程 2025-04-27

发表回复

登录后才能评论