这是我参与「第四届青训营 」笔记创作活动的的第4天
JSON对象
JSON指JavaScript Object Notation,用于数据交换。
JSON对值的类型以及格式的规定:
- 复合类型的值只能是数组或者对象,不能是函数或者正则表达式,日期等。
- 原始类型的值只能为字符串,数值(10进制),布尔,null。
- 字符串必须用双引号表示。
- 对象的键名必须在双引号内。
- 数组或对象最后一个成员后面,不能加逗号
面向对象编程
JS的对象体系是基于构造函数和原型链的。
构造函数
构造函数一般第一个字母大写。 函数体内用了“this”关键字,代表了所要生成的对象的实例、 生成对象的时候必须使用[new命令]。
new命令
new命令让构造函数生成一个实例对象。如果没有使用new命令,构造函数会变成普通函数,并不会生成实例对象。
var Vehicle = function () {
this.price = 1000;
};
var v = new Vehicle();
v.price // 1000
为了保证构造函数和new命令一起使用,有个解决办法是在构造函数内部使用严格模式。在函数的第一行加上use strict,一旦忘记使用则函数会报错。
function Fubar(foo, bar){
'use strict';
this._foo = foo;
this._bar = bar;
}
Fubar()
// TypeError: Cannot set property '_foo' of undefined
this
this是属性或者方法当前最在的对象。 this主要有以下使用场合:
- 全局环境:指向的就是顶层对象window
- 构造函数:指向的是实例对象
- 对象的方法:指向的是方法运行时所在的对象。如果该方法赋值给另一个对象,就会改变this的指向。
用call apply bind可以固定this的指向。 apply的第二个参数是一个数组。 JavaScript用apply和Math.max结合来找出数组的最大元素:
var a = [10, 2, 4, 15, 9];
Math.max.apply(null, a) // 15
prototype属性
对于构造函数来说,用prototype生成实例的时候,该属性会自动成为实例对象的原型.只要修改原型对象,变动会体现在所有的实例对象上面.
constructor
可以知道实例对象是由哪个构造函数产生的.
instanceOf
判断对象是否是某个构造函数的实例
构造函数的继承
// 第一步,子类继承父类的实例
function Rectangle() {
Shape.call(this); // 调用父类构造函数
}
// 另一种写法
function Rectangle() {
this.base = Shape;
this.base();
}
// 第二步,子类继承父类的原型
Rectangle.prototype = Object.create(Shape.prototype);
Rectangle.prototype.constructor = Rectangle;