JSON(JavaScript对象表示法)
- 概念:是一种轻量级数据(交换)格式
- 特点:易于开发者阅读和编写;易于计算机解析和生成,主要用来存储数据的
- JSON文件
- 扩展名为 .json
- JSON语法结构:
- 对象格式 - 键/值对
‘{
“key” : “value”,
“key” : “value”,
…
}’ (主要用来将属性值进行存储,方法就不能存储)
- 对象格式 - 键/值对
- 数组结构
‘[“value1”,”value2”, “value3”,”value4”…]’ - 嵌套问题 – 语法不规定多少层,在开发中建议最多3层。
- JSON对象和JSON字符串
- JSON对象:
JSON格式的数据在某个指定语言中所支持的方式或类型
对象类型
数组类型 - JSON字符串:
格式符合JSON格式要求的字符串,作用:为了与服务器和其他终端进行数据的交换。
在JS中JSON字符串是String类型
JSON格式的内容必须使用 双引号
- JSON对象:
- JSON对象和JSON字符串之间的转换
- JavaScript中提供了JSON
- JSON.stringify() – 将JSON对象转换为JSON字符串
- JSON.parse() – JSON字符串转换为JSON对象
- 兼容问题
*在IE 8 版本之前不支持JavaScript 中的JSON - 可以使用第三方的兼容解决方案 – json2.js
- eavl()函数将字符串强行转换为JavaScript 代码,它的参数严格要求是string类型,而不是String类型。
{}在eavl函数中被认为是 语句块,而不是 对象,通常的解决方案是在 {}外包裹一个小括号。
构造函数(constructor) - 对象与函数的关系:
- 概念:函数本身也是一个对象 Function instanceof Object //true
Object本身也是一个函数 Object instanceof Function //true
(仅仅指的就是构造函数Object)
- 概念:函数本身也是一个对象 Function instanceof Object //true
- 扩展创建函数的方式:
var 函数名 = new Function(‘参数’ ,‘函数体’) 扩展创建对象的方式:
* 创建构造函数: - 类似于群体(类)
function 构造函数名(形参){
this.属性名 = 属性值;
this.方法名 = function(){
方法体
}
}
根据构造函数创建对象 – 类似于群体中的个体
用构造函数创建的对象: var 对象名 = new 构造函数名();
this – 在构造函数中,用于指代创建的对象- 构造函数就是专门用来创建对象的函数 - 构造函数就是一个普通的函数,声明方式和普通函数没有区别,但是我们一般习惯构造函数的首字母大写 - 一个函数如果直接调用,那么它就是一个普通函数,如果使用new关键字来调用,它就是一个构造函数
- 一个构造函数我们也称为一个类(class),通过一个构造函数创建的对象,我们称这个对象是这个类的实例,通过同一个构造函数创建的对象,我们称为同一类对象
- 构造函数的执行流程:
1.创建一个新的对象
2.将新的对象设置为函数中的this(可以通过this向新的对象中添加属性)
3.按顺序执行函数中的代码
4.将新建的对象作为返回值返回 - 当函数以构造函数的形式调用时,this是新建的那个对象
–instanceof - 通过该运算符可以检查一个对象是否是一个构造函数的实例
- 语法:
对象 instanceof 构造函数
- 如果是构造函数的实例,则返回true,否则返回false
Object所有对象的祖先,所以所有的对象和Object做instanceof都会返回true
- 如果是构造函数的实例,则返回true,否则返回false
- 语法:
- 构造函数的执行流程:
- 一个构造函数我们也称为一个类(class),通过一个构造函数创建的对象,我们称这个对象是这个类的实例,通过同一个构造函数创建的对象,我们称为同一类对象
- 例题:
定义一个Person类,要求类中具有三个属性,并在类的原型中添加一个 toString()方法,使其可以输出对象的信息。
function Person(name,age,gender){
this.name = name;
this.age = age;
this.gender = gender;
}
//添加toString()方法
Person.prototype.toString = function(){
console.log(“….”);
return “Person[…..]”
}
函数对象的方法
call()和apply()- 实现构造函数之间的属性传递
Function.call(this,形参)
- 作用:将调用call()方法的那个构造函数的所有属性和方法继承到当前构造函数中。
- 参数:this – 当前调用的那个构造函数所创建的对象
- 通过调用构造函数.call()属性,将它的属性和方法,继承到当前的构造函数中。
- 通常,将若干个构造函数中拥有相同属性或方法,统一定义在一个构造函数中,通过调用call()方法继承下来。然后在分别创建其他的属性。
- 特点:代码量降低,性能提高。
Function.apply(this ,形参) 有没有传递参数,this都必须写
- 特点:代码量降低,性能提高。
- 两者实现的效果是相同的。
- 不同的是call直接传递实参,而apply需要将实参封装到数组中传递
-call是将实参直接传递
fun.call(this , 123 , 456);
-apply需要将实参封装到一个数组中传递
fun.apply(this , [123 , 456]);
- this到底是谁?
- 根据函数调用的形式不同,this的值也不同
1.以函数形式调用,this是window
2.以方法形式调用,this是调用方法的对象
3.以构造函数形式调用,this是新建的对象
4.使用call和apply调用,this是call和apply第一个参数