第197天:js---caller、callee、constructor和prototype用法

简介: 一、caller---返回函数调用者 1 //返回函数调用者 2 //caller的应用场景 主要用于察看函数本身被哪个函数调用 3 function fn() { 4 //判断某函数是否被调用 5 if (fn.

一、caller---返回函数调用者

 1 //返回函数调用者
 2 //caller的应用场景 主要用于察看函数本身被哪个函数调用
 3     function fn() {
 4 //判断某函数是否被调用
 5         if (fn.caller) {
 6             alert(fn.caller.toString());
 7         } else {
 8             alert("函数直接执行");
 9         }
10     }
11     function handleCaller() {
12         fn();
13     }
14     // fn被其他函数调用
15     handleCaller();
16     //fn没有被其它函数调用而是直接执行
17     fn();

二、callee---返回正被执行的 Function 对象

 1 // 返回正被执行的 Function 对象,也就是所指定的 Function 对象的正文.
 2 // callee是arguments 的一个属性成员,它表示对函数对象本身的引用
 3 // arguments.callee.length可以获取实参参数
 4 
 5 
 6 //callee用处1 用来判断实际参数跟行参是否一致
 7 function calleeLengthDemo(arg1, arg2) {
 8 //    callee表示当前正在执行的函数对象,其实是函数的一个实例化
 9     alert(arguments.callee.toString());
10     if (arguments.length == arguments.callee.length) {
11         window.alert("验证形参和实参长度正确!");
12         return;
13     } else {
14         alert("实参长度:" + arguments.length);
15         alert("形参长度: " + arguments.callee.length);
16     }
17 }
18 //当函数被执行的时候,生成一个实例
19 calleeLengthDemo(1);
20 
21 
22 //callee用处2 调用自身 - 比如递归函数
23 // 优点:这样就让代码更加简练。又防止了全局变量的污染
24 //如下是一个递归算法 - 计算 1+2+3+4+...+n
25 var fn=(function(n){
26     if(n>0) return n+arguments.callee(n-1);
27     return 0;
28 })(10);
29 alert('采用callee方式:'+fn);
30 
31 
32 // 传统方式的缺点:
33 // 1,破坏了,零重复法则,当一旦函数名称更改,需要更改多处
34 // 2,fn是一个全局变量,fn内部一般使用局部bianliang,而这里是一个全局变量,这是一个潜在的全局变量污染
35 var fn=function(n){
36     if(n>0) return n+fn(n-1);
37     return 0;
38 }
39 alert('采用传统方式'+fn(10));

三、constructor

 1 //    什么是构造函数 - -专门用于创建对象或者累的函数 -- 因为js中原来没有对象的概念,通过函数来间接实现面向对象
 2 //我们将创建对象的时候那个函数称之为构造函数
 3 //我们可以通过constructor属性获取某个对象的构造函数
 4 //constructor 属性就是用来构造对象实例的函数引用 - 后面的知识点
 5     //构造函数 创建的对象
 6     function Student(name) {
 7         this.name = name;
 8     }
 9     var zhangsan = new Student('张三');
10     if (zhangsan.constructor == Student)
11         document.write("zhangsan是根据构造函数Student创造(实例化)出来的"+"<br />");
12 
13 
14 //字符串对象
15     var str = new String("Hi");
16     if (str.constructor == String)
17         document.write("str是根据构造函数String创造(实例化)出来的");
18 
19     // 输出:
20     // 学生类的构造函数是Student函数
21     // str的构造函数是String

四、prototype属性

 1 // prototype属性 -- 原型创建对象的底层原理 - 重点  __proto__
 2 //获取对象的原型。
 3 //每一个构造函数都有一个prototype属性,指向另一个对象。
 4 //这个对象的所有属性和方法,都会被构造函数的实例继承。
 5 //这意味着,我们可以把那些不变的属性和方法,直接定义在prototype对象上。
 6 
 7 // 目前只需要掌握通俗理解方式:对象的创建其实包含两个部分:构造函数部分,原型部分
 8 // 当我们new一个对象的实例的时候,这个实例能够同时拥有构造函数对象和原型对象的属性和方法就是通过prototype属性来实现的
 9 // 具体实现方式,下次详细讲解
10 
11 
12 //古代的男人
13 function Man(name, age) {
14     this.name = name;
15     this.age = age;
16 }
17 
18 
19 //这里其实是两个对象 Man 和 Man.prototype
20 //这两个对象通过prototype属性实现关联
21 //关联后的结果,Man对象继承Man.prototype,从而使得Man拥有Man.prototype的所有属性和方法
22 
23 
24 Man.prototype.sex = "纯爷们";
25 //方法:战斗
26 Man.prototype.struggle = function () {
27     alert("方天画戟,赤兔,征战沙场!!");
28 }
29 
30 //实例化一个男人
31 var 吕布 = new Man("吕布", 20);
32 alert(吕布.sex);//纯爷们
33 吕布.struggle();//方天画戟,赤兔,征战沙场!!
34 
35 
36 //古代女人
37 function Woman(name, age) {
38     this.name = name;
39     this.age = age;
40 }
41 Woman.prototype.sex = "小家碧玉";
42 Woman.prototype.zhibu = function () {
43     alert("织布 歌舞 琴棋书画");
44 }
45 var 貂蝉 = new Woman("貂蝉", 16);
46 alert(貂蝉.sex);//小家碧玉
47 貂蝉.zhibu();//d织布 歌舞 琴棋书画

 

相关文章
|
2月前
|
数据采集 Web App开发 JavaScript
Puppeteer的高级用法:如何在Node.js中实现复杂的Web Scraping
随着互联网的发展,网页数据抓取已成为数据分析和市场调研的关键手段。Puppeteer是一款由Google开发的无头浏览器工具,可在Node.js环境中模拟用户行为,高效抓取网页数据。本文将介绍如何利用Puppeteer的高级功能,通过设置代理IP、User-Agent和Cookies等技术,实现复杂的Web Scraping任务,并提供示例代码,展示如何使用亿牛云的爬虫代理来提高爬虫的成功率。通过合理配置这些参数,开发者可以有效规避目标网站的反爬机制,提升数据抓取效率。
194 4
Puppeteer的高级用法:如何在Node.js中实现复杂的Web Scraping
|
30天前
|
JavaScript 前端开发
JS try catch用法:异常处理
【10月更文挑战第12天】try/catch` 是 JavaScript 中非常重要的一个特性,它可以帮助我们更好地处理程序中的异常情况,提高程序的可靠性和稳定性。
15 1
|
1月前
|
JavaScript 前端开发
js的math.max的用法
js的math.max的用法
34 6
|
1月前
|
JavaScript
JS中的splice的三种用法(删除,替换,插入)
JS中的splice的三种用法(删除,替换,插入)
168 4
|
2月前
|
数据采集 存储 JavaScript
Puppeteer的高级用法:如何在Node.js中实现复杂的Web Scraping
在现代Web开发中,数据采集尤为重要,尤其在财经领域。本文以“东财股吧”为例,介绍如何使用Puppeteer结合代理IP技术进行高效的数据抓取。Puppeteer是一个强大的Node.js库,支持无头浏览器操作,适用于复杂的数据采集任务。通过设置代理IP、User-Agent及Cookies,可显著提升抓取成功率与效率,并以示例代码展示具体实现过程,为数据分析提供有力支持。
Puppeteer的高级用法:如何在Node.js中实现复杂的Web Scraping
|
2月前
|
JavaScript 前端开发
JavaScript用法
JavaScript用法
|
1月前
|
前端开发 JavaScript 开发者
深入理解JavaScript中的Promise:用法与最佳实践
【10月更文挑战第8天】深入理解JavaScript中的Promise:用法与最佳实践
56 0
|
1月前
|
JavaScript 前端开发
JavaScript - 测试 Prototype
JavaScript - 测试 Prototype
11 0
|
2月前
|
JavaScript 前端开发
JavaScript prototype(原型对象)
JavaScript prototype(原型对象)
31 0
|
2月前
|
JavaScript 前端开发 索引
JavaScript 数组中splice()的用法
本文介绍了JavaScript数组方法splice()的三种用法:删除元素、插入元素和替换元素,通过具体代码示例展示了如何使用splice()方法进行数组的修改操作。