JavaScript学习笔记整理 | 青训营笔记

93 阅读2分钟

这是我参与「第四届青训营 」笔记创作活动的的第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;