在JavaScript的世界里,函数是一等公民,设计模式是原型链继承,何解?
ok,来概括一下吧;
只要是一门语言,那就会有自带的函数以及对象;
JavaScript数据类型有7种:null, undefined, boolean, number, string, symbol, object.(没错,全是小写的,不信用typeof检测);\(^-^)/
前面6种合起来称为原始类型,原始类型就没什么可讲的。
重头戏:object类型
其实吧,个人感觉可以把内置的object全部当成是构造函数!!!
听我娓娓道来;
其实关于object类型,内置的只有两个构造函数,就是
(其实只有一个,因为Function的__proto__的__proto__指向的是Object,说明Funtion也是Object的实例)
//首先是Funtion构造函数
function Funtion(...arg){
//下面是一些Function构造函数的自身属性,以便直接使用Function.**语法使用,打印一下发现其实Function也没有什么自身属性。。。
***
}
//下面就是原型设计模式的体现了
Function.prototype = {
constructor: Fucntion,
//下面就是一些公用方法,继承的时候用
***
}
***
//下面是Object构造函数,跟上面差不多
function Object(...arg){
//默认属性
***
}
Object.prototype = {
//下面是原型方法,继承的时候用
constructor: Object,
***
}
就是这样,然后所有自己定义的函数或者对象,其实都是他们两个的实例,当然就会获得这两个构造函数的自身属性以及原型方法啦!!!
当我们给新建的object或者function添加属性的时候,有时候会用到getOwnPropertyNames(),这样我们就可以获取自身定义的属性和方法啦!!!(当然还有好多自带的属性和方法,不一一列举);
哦,还有其他几种数据结构
function Array(...arg){}
Array.prototype = {}
function Set(...arg){}
Set.prototype={}
都是差不多的意思,其实也可以把那几个原始数据类型也可以算进去,当成构造函数。
function Number(...arg){}
Number.prototype={};
function String(...arg){}
String.prototype={};
function Symbol(...arg){}
Symbol.prototype={};
function Boolean(...arg){}
Boolean.prototype={}
//undefined, null是没有的
其实这样看来,那个es6,es7什么的,就是在原来基础上面加了几个官方自己写的构造函数啊。