文章目录

  • 函数
    • 声明方式
    • 形参学习
    • 返回值
    • 函数执行符
    • 开发中常用样式
  • 类学习
    • 类的声明
    • 类的使用
    • 类的“继承”
    • 自定义对象

函数

函数的作用:功能代码块的封装,减少重复代码、代码冗余。
注: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学习(三)--同样灵活的函数、类相关推荐

  1. JS学习笔记(五)函数类型、箭头函数、arguments参数、标签函数

    JS学习笔记(五) 本系列更多文章,可以查看专栏 JS学习笔记 文章目录 JS学习笔记(五) 一.函数 1. 函数定义 2. 方法( 对象 + 函数 ) 二.函数参数及返回值 1. 传递原始类型参数 ...

  2. js学习总结----柯里化函数

    柯里化函数函数思想:一个JS预处理的思想->利用函数执行可以形成一个不销毁的私有作用域的原理,把需要预先处理的内容都存在这个不销毁的作用域中,并且返回一个小函数,以后我们执行的都是小函数,在小函 ...

  3. Kotlin学习三:高阶函数

    目录 一.高阶函数的基本概念 二.常见高阶函数 1.关于list映射 2.flatMap 3.综合1 4.综合2 三.尾递归优化 四.闭包 五.函数复合 六.科理化 七.偏函数 八.小案例 一.高阶函 ...

  4. JS学习之求带参函数求任意两个数和

    <!DOCTYPE html> <html><head><meta charset="utf-8"><title>带参函 ...

  5. Python|装饰器|执行时间|递归|动态属性|静态方法和类|继承和多态|isinstance类型判断|溢出|“魔法”方法|语言基础50课:学习记录(6)-函数的高级应用、面向对象编程、进阶及应用

    文章目录 系列目录 原项目地址: 第16课:函数的高级应用 装饰器(记录执行时间的例子) 递归调用 简单的总结 第17课:面向对象编程入门 类和对象 定义类 创建和使用对象 初始化方法 打印对象 面向 ...

  6. OpenCV学习笔记(三十六)——Kalman滤波做运动目标跟踪 OpenCV学习笔记(三十七)——实用函数、系统函数、宏core OpenCV学习笔记(三十八)——显示当前FPS OpenC

    OpenCV学习笔记(三十六)--Kalman滤波做运动目标跟踪 kalman滤波大家都很熟悉,其基本思想就是先不考虑输入信号和观测噪声的影响,得到状态变量和输出信号的估计值,再用输出信号的估计误差加 ...

  7. C++模板学习02(类模板)(类模板语法、类模板与函数模板的区别、类模板中的成员函数创建时机、类模板对象做函数参数、类模板与继承、类模板成员函数类外实现、类模板分文件编写、类模板与友元)

    C++引用详情(引用的基本语法,注意事项,做函数的参数以及引用的本质,常量引用) 函数高级C++(函数的默认参数,函数的占位参数,函数重载的基本语法以及注意事项) C++类和对象-封装(属性和行为作为 ...

  8. Vue.js 学习笔记 四 用一,二,三的知识做个跑马灯

    做个简单的跑马灯效果 页面定义2个按钮,绑定2个方法. <div id="divApp"><input type="button" value ...

  9. Vue.js 学习笔记三,一些基础指令,v-bind,v-on

    在笔记二的基础上继续写 v-bind指令,为属性绑定数据 <!--v-bind指令可以绑定属性--><div v-html="msg2" v-bind:title ...

最新文章

  1. Windows远程连接的实现
  2. 【vuejs路由】vuejs 路由基础入门实战操作详细指南
  3. eclipse python_【Python基础】Python基础语法
  4. index.html文件作用,MEAN JS – 主要的html文件(index.html)位于何处
  5. 十个最适合 Web 和 APP 开发的 NodeJS 框架
  6. sort list java leetcode_[LeetCode] 148. Sort List Java
  7. [集训队作业2018] 三角形(贪心,堆,线段树合并)
  8. shell命令获取结果指定行(指定行结果)
  9. kafka生产消费原理笔记
  10. android标题白色_Android设置布局背景为白色的三种方法
  11. java开发工具eli_Java 学习线路图是怎样的?
  12. Vsphere auto deploy 简介
  13. (转)配置Website的IIS时遇到的问题与解决方法
  14. 任正非号召华为员工学习一份20页 5G PPT:认识5G,发展5G
  15. SIFT特征提取原理
  16. DevOps ACA 软件代码与质量管理(六)
  17. 软考软件测评师学习笔记(一)
  18. python给excel排序_数据处理,Excel的排序功能,使用pandas在Python中轻松完成
  19. [GXYCTF2019]Ping Ping Ping {命令执行总结}
  20. Web开发分享qq、微信组件-百度分享

热门文章

  1. 低仿网易云音乐音频播放器!自动获取歌曲封面,并旋转
  2. 前端vue 表格转换为图片导出
  3. Mybatis知识点讲解 【笔记】
  4. x86-SSE指令集
  5. 喷雾干燥机械2022年全球行业分析报告
  6. 青提WIFI代理系统开发
  7. 前端开发:JS中原型和原型链的介绍
  8. stm32点亮led灯。
  9. pe进不去linux系统怎么办,u盘启动不了pe系统怎么办_电脑进不去u盘的pe系统解决方法-win7之家...
  10. APP自动化测试神器之Appium-Python环境部署及脚本实战