JavaScript函数学习有哪些基础知识点要掌握
Admin 2022-05-28 群英技术资�
1.函数创建的三种方�
// 方式1:字符串封装代码创建函数 var fun = new Function("console.log('hello 我是第一个函�');"); console.log(fun); // 函数在被调用时执� fun() // 方式2:函数声� function fun2() { console.log(fun2) } fun2() // 方式3:函数表达式 var fun3 = function () { console.log("我是匿名函数的封装的代码") }; console.log(fun3) fun3();
1.函数的实参可以是一个对象或函数
function mianji(r){ return 3.14 * r * r; } function fun(a) { console.log("a = " + a) } fun(mianji(10)) fun(mianji)
2.函数的返回值可以是一个对象或函数�
function fun4(){ function fun5(){ alert("我是fun5") } return fun5; } a = fun4(); console.log(a) //输出fun5函数� a() //输出"我是fun5" fun4()() //输出"我是fun5"
function Person(name, age, gender) { this.name = name; this.age = age; this.gender = gender; this.sayName = function () { alert(this.name) }; } var per = new Person("张三", 15, "�") var per2 = new Person("李四", 16, "�") var per3 = new Person("王五", 17, "�") console.log(per)
构造函数执行流程:
1.立刻创建一个对�
2.将新建的对象设置为函数中this
3.逐行执行函数中的代码
4.新建的对象最为返回值返�
总结� 如上为构造函数,必须用new关键字调用,普通函数时直接调用,用this替代obj
(function(){ alert("我是一个匿名函�") }) // 函数定义完,立即被调用,称为立即执行函数
1.JavaScript 规定,每一个构造函数都有一个prototype 属性�
2.构造函数通过原型分配的函数是所有对象所共享�
3.我们可以把那些不变的方法,直接定义在 prototype 对象上,这样所有对象的实例就可以共享这些方法�
简�:每一个对象都会有一个属� proto 指向构造函数的 prototype 原型对象,实例对象使用构造函� prototype 原型对象的属性和方法,因为对象有 proto 原型的存在�
1.当以函数的形式调用时,this是window�
2.当以方法的形式调用时,谁调用方法 this就是谁;
3.当以构造函数的形式调用时,this就是新创建的那个对象�
1.Function.prototype.call():使用一个指定的 this 值调用一个函�(简单理解为调用函数的方式,但是它可以改变函数的 this 指向)
2.Function.prototype.apply() 方法调用一个函数。简单理解为调用函数的方式,但是它可以改变函数的 this 指向
3. Function.prototype.bind() 方法不会调用函数,但是能改变函数内部this 指向,返回的是原函数改变this之后产生的新函数
// 1.call方法 var o = { name:"张美�" } function fn(a,b) { console.log(this); console.log(a + b); } fn(1,3) //此时的this指向的是window 运行结果�3 fn.call(o,1,2) //此时的this指向的是对象o 运行结果:输出对象o�3 // 2.apply方法 var o = { name:'andy' } function fn1(a,b) { console.log(this); console.log(a + b) } fn() //此时的this指向的是window 运行结果�3 fn.apply(o,[1,2]) //此时的this指向的对象o,运行结果:输出对象o�3 // 3.bind方法 var o = { name:'andy' } function fn1(a,b) { console.log(this); console.log(a + b) } var f = fn.bind(o,1,2) //此处的f是bind返回的新函数 f() //调用新函� this指向的是对象o
1.先定义一个父构造函�
2.再定义一个子构造函�
3.子构造函数继承父构造函数的属�(使用call方法)
// 1.父构造函� function Father(uname) { // this 指向父构造函数的对象实例 this.uname = uname; } // 2.子构造函� function Son(uname, age) { // this指向子构造函数的对象实例 // 3.使用call方式实现子继承父的属� Father.call(this.uname); this.age = age; } var son = new Son('王帅�', 18); console.log(son); // Son {age:18}
// 1.父构造函� function Father(uname, age) { // this 指向父构造函数的对象实例 this.uname = uname; this.age = age; } Father.prototype.money = function() { console.log(100000); }; // 2.子构造函� function Son(uname, age, score) { // this 指向子构造函数的对象实例 Father.call(this, uname, age); this.score = score; } // Son.prototype = Father.prototype; 这样直接赋值会有问�,如果修改了子原型对象,父原型对象也会跟着一起变� Son.prototype = new Father(); // 如果利用对象的形式修改了原型对象,别忘了利用constructor 指回原来的构造函� Son.prototype.constructor = Son; // 这个是子构造函数专门的方法 Son.prototype.exam = function() { console.log('孩子要考试'); } var son = new Son('王帅�',18,100); console.log(son); //存在一个Father原型对象,在Father里面有age,uname,exam;money在fahter外层的原型对象里靀�
// 父类 function Shape() { this.x = 0; this.y = 0; } // 子类 function Rectangle() { Shape.call(this); // 调用父类的构造函� } // 将父类的原型对象,作为子类原型的原型对象。子类续承父� Rectangle.prototype = Object.create(Shape.prototype); // 设置子类原型的构造函� Rectangle.prototype.constructor = Rectangle; var r = new Rectangle(); r instanceof Rectangle; // true r instanceof Shape; // true
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:[email protected]进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容�
猜你喜欢
这篇文章主要给大家分享用JS实现动态表格效果,也就是点击增加或者删除就可以自动增加或删除表格的行,小编觉得还是比较实用的,感兴趣的朋友可以参考一下,希望大家阅读完这篇文章能有所收获,下面我们一起来学习一下吧�
这篇文章主要介绍了一个处理react异常的ErrorBoundary组件,简单实�,代码详细,对这个组件感兴趣的朋友可以参考下
大家�,本篇文章主要的讲的是html+css+js实现别踩白板小游戏,感兴趣的同学赶快来看一看吧,觉得不错的话可以收藏一下哦,方便下次浏�
这篇文章主要为大家介绍了Vue的列表渲染,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
目录vue打包去掉所有的console.log输出安装插件添加配置vue npm run build 打包去掉console和警告其实就两行代码就可以了vue打包去掉所有的console.log输出安装插件npm install babel-plugin-transform-remove-console --save-
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所�
增值电信经营许可证 : B1.B2-20140078