js学习(三)--同样灵活的函数、类
文章目录
- 函数
- 声明方式
- 形参学习
- 返回值
- 函数执行符
- 开发中常用样式
- 类学习
- 类的声明
- 类的使用
- 类的“继承”
- 自定义对象
函数
函数的作用:功能代码块的封装,减少重复代码、代码冗余。
注:js代码生命区和执行区在一起。
声明方式
因为js是弱类型语言,所以在函数的声明中,参数的类型可以不写。
声明方式1:
function test1(a1,a2){alert("test01");
}
test1(1,1);//调用
声明方式2:
var test2 = new Function("a1","a2","alert('test02');");//前面的参数是声明函数的参数(任意多个),最后一个参数是声明函数的函数体
test2(1,1);//调用
声明方式3:
var test3 = function(a1,a2){alert("我是声明方式3");
}
test3("a1","a2");//调用
== 上述声明方式只是在用法上有区别,底层实现原理都一样==
形参学习
function test1(a1,a2){alert("test01");
}
test1();
test1(1);
test1(1,1);//调用
test1(1,1,1);
调用函数时,参数可以传任意个,按顺序给函数传值。如果传的比需要的少,那么后面的参数为undefined,如果传的比需要的多,那么多传的没有参数接收,无法使用。
返回值
var test4 = function(a1){alert("函数返回值");return 1;
}
alert(test4(1));/* 没有返回值还打印会报错 */
return 返回值;
输出的函数如果没有返回值会报错。
函数执行符
函数的执行符是“()”,有小括号的时候执行函数,没有则是一个变量。
function test1(a1,a2){return "返回值";
}
alert(test1);//输出test1的值
alert(test1("a1","a2"));//执行test1()并输出返回值
alert(test1); –
alert(test1(“a1”,“a2”)); –
开发中常用样式
匿名函数
function test2(fu){//函数参数是另一个函数fu();
}
//匿名函数做另一个函数的参数
test2(function(){alert("开发");
});
类学习
类的声明
类的声明只用一种形式:
function Person(name,age){/* 类中定义的变量是对象的公共部分,每个对象可以扩充 */this.name = name;//不用声明,自动声明this.age = age;this.id;this.test = function(a){alert(a);}//两个对象的方法不是同一个 p1.test === p2.test false
}
js类的声明类似构造器声明,this.变量名指代类中的变量,用类名后面的参数赋值,或者自己赋值,或者不复制,定义函数与变量相同。类中的变量都不用声明,js会自动声明。
在类中定义的变量都是对象公有的部分(原型空间),即之后新建的每一个对象都有这些属性函数。可以在声明一个对象之后给对象添加一个变量、函数。如下:
var p1 = new Person("张三",20);
var p2 = new Person("李四",20);
p1.address = "山东省";//Person类里面没有adress变量,但是可以自己定义,这里p1有adress变量,而p2没有adress变量
类的使用
声明一个对象:
var p1 = new Person("张三",20);//js中所有变量(对象也是变量)都用var关键字
使用对象的变量:
alert(p1.name);
prototype:
类中有函数,每声明一个对象,都会占用一块内存给函数,但是同一个类的不同对象的函数功能都是一样的,如果让同一个类的不同对象使用的函数(在内存中的)都是同一个,那样会大大节省内存空间,使用prototype可以实现这样的需求。
function User(name,id){this.name = name;this.id = id;this.test1 = function(){alert("内部函数");}
}
User.prototype.test2 = function(){//要想使用prototype只能在外面定义alert("外部函数");
}var u1 = new User("张三",21);
var u2 = new User("李四",21);
alert(u1.test1 === u2.test1); //false
alert(u1.test2 === u2.test2); //true
类的“继承”
js没有继承,但可以在一个类(子类)中定义另一个类(父类)的变量实现相同效果。
function Person(name,age){this.name = name;this.age = age;this.id;this.test = function(a){alert(a);}
}
function User(name,id){this.name = name;this.id = id;
}
User.prototype.test = function(){alert("我是user");
}
Person.prototype.user = new User();
p1.user.test();
自定义对象
因为js的类可以进行扩充,同时在开发中很多时候并不知道传过来的数据是什么类,所以要使用自定义对象,动态存储数据。
创建自定义对象:
/* 第一种方法 */
var obj1 = new Object(); //可以认为对象里面什么都没有
obj1.name = "王二狗";
obj1.id = "2969";
obj1.test = function(){/* 一般用来存储数据,不会在自定义对象中写函数 */alert("我是王二狗");
}/* 第二种方法 */
var obj2 = {};
obj2.name = "大伟哥";
作用:
很多时候我们没有办法预先知道一个对象应该有哪些属性,所以只能使用自定义对象来存储数据,保证数据的完整性,常在Ajax中使用。
js学习(三)--同样灵活的函数、类相关推荐
- JS学习笔记(五)函数类型、箭头函数、arguments参数、标签函数
JS学习笔记(五) 本系列更多文章,可以查看专栏 JS学习笔记 文章目录 JS学习笔记(五) 一.函数 1. 函数定义 2. 方法( 对象 + 函数 ) 二.函数参数及返回值 1. 传递原始类型参数 ...
- js学习总结----柯里化函数
柯里化函数函数思想:一个JS预处理的思想->利用函数执行可以形成一个不销毁的私有作用域的原理,把需要预先处理的内容都存在这个不销毁的作用域中,并且返回一个小函数,以后我们执行的都是小函数,在小函 ...
- Kotlin学习三:高阶函数
目录 一.高阶函数的基本概念 二.常见高阶函数 1.关于list映射 2.flatMap 3.综合1 4.综合2 三.尾递归优化 四.闭包 五.函数复合 六.科理化 七.偏函数 八.小案例 一.高阶函 ...
- JS学习之求带参函数求任意两个数和
<!DOCTYPE html> <html><head><meta charset="utf-8"><title>带参函 ...
- Python|装饰器|执行时间|递归|动态属性|静态方法和类|继承和多态|isinstance类型判断|溢出|“魔法”方法|语言基础50课:学习记录(6)-函数的高级应用、面向对象编程、进阶及应用
文章目录 系列目录 原项目地址: 第16课:函数的高级应用 装饰器(记录执行时间的例子) 递归调用 简单的总结 第17课:面向对象编程入门 类和对象 定义类 创建和使用对象 初始化方法 打印对象 面向 ...
- OpenCV学习笔记(三十六)——Kalman滤波做运动目标跟踪 OpenCV学习笔记(三十七)——实用函数、系统函数、宏core OpenCV学习笔记(三十八)——显示当前FPS OpenC
OpenCV学习笔记(三十六)--Kalman滤波做运动目标跟踪 kalman滤波大家都很熟悉,其基本思想就是先不考虑输入信号和观测噪声的影响,得到状态变量和输出信号的估计值,再用输出信号的估计误差加 ...
- C++模板学习02(类模板)(类模板语法、类模板与函数模板的区别、类模板中的成员函数创建时机、类模板对象做函数参数、类模板与继承、类模板成员函数类外实现、类模板分文件编写、类模板与友元)
C++引用详情(引用的基本语法,注意事项,做函数的参数以及引用的本质,常量引用) 函数高级C++(函数的默认参数,函数的占位参数,函数重载的基本语法以及注意事项) C++类和对象-封装(属性和行为作为 ...
- Vue.js 学习笔记 四 用一,二,三的知识做个跑马灯
做个简单的跑马灯效果 页面定义2个按钮,绑定2个方法. <div id="divApp"><input type="button" value ...
- Vue.js 学习笔记三,一些基础指令,v-bind,v-on
在笔记二的基础上继续写 v-bind指令,为属性绑定数据 <!--v-bind指令可以绑定属性--><div v-html="msg2" v-bind:title ...
最新文章
- Windows远程连接的实现
- 【vuejs路由】vuejs 路由基础入门实战操作详细指南
- eclipse python_【Python基础】Python基础语法
- index.html文件作用,MEAN JS – 主要的html文件(index.html)位于何处
- 十个最适合 Web 和 APP 开发的 NodeJS 框架
- sort list java leetcode_[LeetCode] 148. Sort List Java
- [集训队作业2018] 三角形(贪心,堆,线段树合并)
- shell命令获取结果指定行(指定行结果)
- kafka生产消费原理笔记
- android标题白色_Android设置布局背景为白色的三种方法
- java开发工具eli_Java 学习线路图是怎样的?
- Vsphere auto deploy 简介
- (转)配置Website的IIS时遇到的问题与解决方法
- 任正非号召华为员工学习一份20页 5G PPT:认识5G,发展5G
- SIFT特征提取原理
- DevOps ACA 软件代码与质量管理(六)
- 软考软件测评师学习笔记(一)
- python给excel排序_数据处理,Excel的排序功能,使用pandas在Python中轻松完成
- [GXYCTF2019]Ping Ping Ping {命令执行总结}
- Web开发分享qq、微信组件-百度分享