一.方法
1.方法的定义
方法就是把函数放在对象里面,对象有两个东西:属性和方法
通过 对象名.方法名()使用
a.第一种方法定义
<script> var setFun={ name: "maming", birth: 2002, //方法 :被包含在对象之中 age: function (){ var now = new Date().getFullYear(); return now - this.birth; } } alert(setFun.age()); </script>
方法的调用一定要带 ()
setFun.age();
b.第二种方法的定义
<script> function getAge(){ var now = new Date().getFullYear(); return now - this.birth; } var setFun={ name: "maming", birth: 2002, //方法 :被包含在对象之中 age: getAge } alert(setFun.age()); </script>
这里的this关键字指向的是getAge()的函数中的属性,但是getAge()中没有birth属性,所以这里执行不了
我们可以调用对象来解决:
function getAge(){ var now = new Date().getFullYear(); return now - setFun.birth; } var setFun={ name: "maming", birth: 2002, //方法 :被包含在对象之中 age: getAge } alert(setFun.age()); </script>
这样改了以后就可以,就可以拿到那个属性了
2.apply方法:指向使用那个对象
在js中可以控制this的指向:
<script> function getAge(){ var now = new Date().getFullYear(); return now - this.birth; } var setFun={ name: "maming", birth: 2002, //方法 :被包含在对象之中 age: getAge } alert(getAge.apply(setFun,[])); </script>
getAge.apply(setFun,[ ] ); this指向了setFun对象,参数为空
二.内部对象
1.标准对象
typeof 123
'number'
typeof '123'
'string'
typeof true
'boolean'
typeof NaN
'number'
typeof []
'object'
typeof {}
'object'
typeof Math.abs
'function'
typeof undefined
'undefined'
2.Date对象
<script> var now = new Date(); //Wed Apr 05 2023 20:44:18 GMT+0800 (中国标准时间) console.log(now); now.getFullYear(); //年 now.getMonth(); //月 0~11 月 也是12个月 now.getDate(); //日 now.getDay(); //星期几 now.getHours(); //时 now.getMinutes(); //分 now.getSeconds(); //秒 now.getTime(); //时间搓 全世界统一1970-1-1 0:0 console.log(now.getTime()); //1680698972333 console.log(new Date(now.getTime())); //Wed Apr 05 2023 20:49:52 GMT+0800 (中国标准时间) </script>
获得本地时间:now.toLocaleString();
三.Json对象
Json是什么:
JSON 是一种纯字符串形式的数据,它本身不提供任何方法(函数),非常适合在网络中进行传输。JavaScript、PHP、Java、Python、C++ 等编程语言中都内置了处理 JSON 数据的方法。
JSON 是基于 JavaScript(Standard ECMA-262 3rd Edition - December 1999)的一个子集,是一种开放的、轻量级的数据交换格式,采用独立于编程语言的文本格式来存储和表示数据,易于程序员阅读与编写,同时也易于计算机解析和生成,通常用于在 Web 客户端(浏览器)与 Web 服务器端之间传递数据。
在JavaScript一切皆为对象,任何js支持的类型都可以使用Json来表示;
格式:
- 对象都用{ ... }
- 数组都用[ ... ]
- 所有的键值对都是用 key:value
<script> var user = { name: "mamaing", age: 18, sex: "boy" } //{name: 'mamaing', age: 18, sex: 'boy'} var jsonUser = JSON.stringify(user); //将JavaScript转换为json字符串 // '{"name":"mamaing","age":18,"sex":"boy"}' var userJson = JSON.parse('{"name":"mamaing","age":18,"sex":"boy"}'); //将Json字符串转换为JavaScript对象 // {name: 'mamaing', age: 18, sex: 'boy'} // age: 18 // name: "mamaing" // sex: "boy" // [[Prototype]]: Object </script>
Json字符串和js对象:
本质上两者没区别,毕竟靠json传值给后端的,他肯定不会改变js对象本质的值,因为稳定性好所以才都用json
Json是以字符串的形式传递的,所以是一个字符串类型
而被转换的js可以是对象,可以是数组,也可以是字符串,最后都是要转换为字符串的Json字符串的
源生的JSON两个方法:
- JSON.stringify( // JavaScript对象 ); //将JavaScript转换为json字符串
- JSON.parse( // Json字符串 ); //将Json字符串转换为JavaScript对象
四.面向对象的原型继承
1.什么是面向对象
面向对象编程的程序语言:
Java,JavaScript,C#,C++,python.......
但是JavaScript的面向对象与其它的面向对象有一些区别!
其它的面向对象:
看名字它是注重对象的。当解决一个问题的时候,面向对象会把事物抽象成对象的概念,就是说这个问题里面有哪些对象,然后给对象赋一些属性和方法,然后让每个对象去执行自己的方法,问题得到解决。
类:模板(是抽象的描述)
对象:具体的实例(实例化类,具体的实现者)
2.JavaScpirt的面向对象:
原型继承:__proto__ 指向一个对象,就可以继承这个指向对象的属性和方法
<script> var Student ={ name: "student", sex: "boy", run: function (){ console.log(`${name} is running...`) } } var xiaoming ={ name: "xiaoming" }; xiaoming.__proto__ = Student; </script>
xiaoming.__proto__ = Student
{name: 'student', sex: 'boy', run: ƒ}
name: "student"
run: ƒ ()
sex: "boy"
[[Prototype]]: Object
原型的指向就像Java的父类一样,就像继承了父类的方法和属性,所以自己也可以使用
idea 2023.1 打不出 __ 长下划线!!!!
五.面向对象的Class的继承
class关键字是ES6新特性
1.ES6以前的新增方法
<script> function Student(name){ this.name=name; } //给student新增一个方法:需要找到它的原型才能增加 Student.prototype.hello = function (){ alert("hello"); } </script>
需要找到对应函数的原型才能新增,
prototype:原型
2.ES6后,通过类定义和继承
定义一个类,和Java类似
class Student{
//构造器
constructor(name) {
this.name = name;
}
hello(){
alert("hello");
}
}
值得注意的是JavaScript的构造器都是constructor()然后里面填属性(且只有这一个构造器);
Java的是类名来构成构造器(可以有多个,有参无参构造);
3.类的继承
<script> class Student{ //构造器 constructor(name) { this.name = name; } hello(){ alert("hello"); } } class xiaoming extends Student{ constructor(name,grade) { super(name); this.grade=grade; } myFun(){ alert("xiaoming"); } } var xiao = new xiaoming("xiaoming",2); </script>
4.原型链
所有的原型都指向object
__proto__:Object