捡起JavaScript(1)
JS原型介绍
原型的作用是什么?
大家知道的JS不是面向对象的语言,就没有面向对象的继承的概念。那么原型就是用来弥补JS继承功能的。
下面有三个思想需要明确
- 在JavaScript世界中一切都是对象。
- 一切对象都是由方法new出来的。
- 所有的JavaScript的变量最终都会变成Null。
- JavaScript修改任何数据,都可以随心所欲。
JavaScript的数据类型
分为值类型和引用类型
值类型名 | 特别说明
---|---|---
number | NaN
boolean |
string |
object | null
function |
undefined | 默认初始化
symbol | Symbol() ES6引入
一切引用类型都是Object
我们都知道JS判断类型有两种typeof和instanceof,但是这两个有什么区别么?
// 代码1
console.log(typeof(x)); // undefined
console.log(typeof(10)); // number
console.log(typeof('abc')); // string
console.log(typeof(true)); // boolean
console.log(typeof(function () { })); //function
console.log(typeof([1, 'a', true])); //object
console.log(typeof ({ a: 10, b: 20 })); //object
console.log(typeof (null)); //object
console.log(typeof (new Number(10))); //object
// 代码2
function ABC() {}
var abc = new ABC()
console.log(abc instanceof ABC) //true
console.log(abc instanceof Object) //true
console.log(ABC instanceof Function) //true
console.log(ABC instanceof Object) //true
console.log(Function instanceof Object) //true
console.log(abc instanceof Function) //false
console.log(Object instanceof Function) //true
由代码1和代码2可知:
typeof是用来判断值类型,
instanceof是用来追寻祖宗血脉的。
本来看着代码2,可以寻迹这一条线,用来理清JavaScript对象的实例关系。
abc -> ABC -> Function -> Object -> Function ? 怎么最后出现循环实例化链?这不是要死循环?
其实,Function和Object的关系有点像鸡和鸡蛋的关系。(那就下一个笔记再来讨论)