DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Titletitle>
<script>
let person = {
name: "张三",
birthday: 2001,
// 方法
age: function () {
// 获取现在的年份
let now = new Date().getFullYear();
// 今年 - 出生的年份
return now - this.birthday;
}
}
script>
head>
<body>
body>
html>
person.age();
,查看结果:DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Titletitle>
<script>
function getAge() {
// 获取现在的年份
let now = new Date().getFullYear();
// 今年 - 出生的年份
return now - this.birthday;
}
let person = {
name: "张三",
birthday: 2001,
// 方法
age: getAge
}
script>
head>
<body>
body>
html>
person.age();
(注意要带上括号),查看结果:理解 this
getAge();
来获取age
:NaN
。getAge()
是写在对象person
的外面的,由于函数getAge()
中的this
的始终是指向调用它的对象的(此时调用函数getAge()
的对象为全局对象window
,而不是对象person
),所以会返回NaN
(Not a Number)。apply( )
this
是无法控制指向的,它只能默认指向调用它的那个对象。apply()
来控制this
的指向。
Function
实例的apply(thisArg, argsArray)
方法会以给定的this
值和作为数组(或类数组对象)提供的arguments
调用该函数。thisArg
- 调用函数时提供的 this
值;argsArray
(可选)- 一个类数组对象,用于指定调用函数时的参数。apply()
指定上面代码中的getAge()
函数的this
指向person
对象:
getAge.apply(person,[]);
,查看结果:apply()
指定this
指向person
后,成功获取到了age
。标准对象
typeof 123;
'number'
typeof '123';
'string'
typeof true;
'boolean'
typeof NaN;
'number'
typeof [];
'object'
typeof {};
'object'
typeof alert;
'function'
typeof undefined;
'undefined'
Date
实例,该实例呈现时间中的某个时刻。Date
对象则基于 Unix 时间戳,即自 1970 年 1 月 1 日(UTC)起经过的毫秒数。基本使用
Date
示例对象,表示当前时间:DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Titletitle>
<script>
"use strict";
let now = new Date();
script>
head>
<body>
body>
html>
getFullYear() // 返回一个指定的 Date 对象的完整年份(四位数年份)
getMonth() // 返回一个指定的 Date 对象的月份(0–11),0 表示一年中的第一月
getDate() // 返回一个指定的 Date 对象为一个月中的哪一日(1-31)
getDay() // 返回一个指定的 Date 对象是在一周中的第几天(0-6),0 表示星期天
getHours() // 返回一个指定的 Date 对象的小时(0–23)
getMinutes() // 返回一个指定的 Date 对象的分钟数(0–59)
getSeconds() // 返回一个指定的 Date 对象的秒数(0–59)
getTime() // 返回一个数值,表示从1970年1月1日0时0分0秒(UTC,即协调世界时)距离该 Date 对象所代表时间的毫秒数(更早的时间会用负数表示)
补充:将时间戳转换为时间 & toLocaleTimeString( )
new Date(时间戳) // 时间戳转为时间
toLocaleString() // 返回一个表述指定Date对象时间部分的字符串,该字符串格式因不同语言而不同
JSON
( JavaScript Object Notation, JS 对象简谱 )是一种轻量级的数据交换格式。JSON
成为理想的数据交换语言。JSON 与 JavaScript
JSON
来表示,例如字符串、数字、对象、数组等。{}
[]
key:value
格式let obj = {a:"hello", b:"hi"}; // JS对象
let json = '{"a":"hello", "b":"hi"}'; // JSON字符串
JSON字符串 和 JS对象的相互转化
stringify()
将对象转化为JSON
字符串parse()
将JSON
字符串转化为对象。(注意:参数为一个JSON
字符串)DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Titletitle>
<script>
let user = {
name: "张三",
age: 18,
gender: "男"
};
// stringify() - 将对象转化为 json 字符串
let jsonUser = JSON.stringify(user);
console.log(jsonUser); // {"name":"张三","age":18,"gender":"男"}
// parse() - 将 json 字符串转化为对象,注意:参数为一个 json 字符串
let obj = JSON.parse('{"name":"张三","age":18,"gender":"男"}');
console.log(obj);
script>
head>
<body>
body>
html>
xhr
异步请求$("#name").ajax("")
__proto__
- 参考:Object.prototype.__proto__ - JavaScriptstudent1
和一个对象xiaoming
,使用__proto__
设置对象xiaoming
的原型为student1
,通过这种方式实现继承:DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Titletitle>
<script>
let student1 = {
name: "张三",
age: 18,
run: function () {
console.log(this.name + "is running");
}
};
let xiaoming = {
name: "小明"
};
// 设置 xiaoming 的原型为 student1
xiaoming.__proto__ = student1;
script>
head>
<body>
body>
html>
console.log(xiaoming)
和xiaoming.run()
:Bird
,使用__proto__
设置对象xiaoming
的原型为Bird
:DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Titletitle>
<script>
let student1 = {
name: "张三",
age: 18,
run: function () {
console.log(this.name + " is running");
}
};
let xiaoming = {
name: "小明"
};
let Bird = {
fly: function () {
console.log(this.name + " is flying");
}
}
// 设置 xiaoming 的原型为 Bird
xiaoming.__proto__ = Bird;
script>
head>
<body>
body>
html>
console.log(xiaoming)
和xiaoming.fly()
:DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Titletitle>
<script>
function Student(name) {
this.name = name;
}
// 给 Student 新增一个方法
Student.prototype.hello = function () {
alert("hello");
};
script>
head>
<body>
body>
html>
class
关键字,通过class 声明我们能创建一个基于原型继承的具有给定名称的新类(本质上还是通过原型继承)。 参考:class - JavaScriptDOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Titletitle>
<script>
// 定义一个学生类
class Student {
constructor(name) {
this.name = name;
}
hello() {
alert("hello");
}
}
// 实例化,创建 Student 类的实例对象
let xiaoming = new Student("小明");
let xiaohong = new Student("小红");
script>
head>
<body>
body>
html>
extends
关键字来实现继承,不过在 Java 中我们是基于父类继承,而在 JavaScript 中,我们是基于原型继承。Pupil
),继承学生类(Student
):DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Titletitle>
<script>
// 定义一个学生类
class Student {
constructor(name) {
this.name = name;
}
hello() {
alert("hello");
}
}
// 定义一个小学生类,继承学生类
class Pupil extends Student {
constructor(name, grade) {
super(name);
this.grade = grade;
}
myGrade() {
alert("我今年" + this.grade + "年级了");
}
}
// 实例化,创建 Student 类的实例对象
let xiaoming = new Student("小明");
// 实例化,创建 Pupil 类的实例对象
let xiaohong = new Pupil("小红", 3);
script>
head>
<body>
body>
html>
null
作为其原型的对象上。