1首先明确一点js不是面向对象的语音,但js具有极大的灵活性可以模拟面向对象,甚至面向过程乃至全世界。
2 js中面向对象的写法
A最为常见的{}形式的写法,var obj = { };大括号里面的内容以键值对的形式存在,值得形式多样可以是字符串,变量,常量,数组,布尔等等,还可以再嵌套对象为值(这种写法结构清晰推荐写法)。
B js本身就是对象这个类型,写法如下var Person = new Object(),用new的方式去写是符合代码逻辑,但是再继续写Person.name ="wuwenzhou",这样的写法就很菜了,代码是写给人看的,偶尔才会给机器运行一下,这样的写法释义性不强(不推荐);
C构造函数的写法var Person = function(){this.name ="wuwenzhou" } ;在用var me = new Person ();去实例化,注意点在JS中用大写开头的写法来模拟类型,小写写法申明实例化对象(推荐写法具有极大优势,在控制台打印时当前对象名就是类名,结构清晰便于代码调试,A,B两种写法在控制台中之后只会显示object释义性差)
D原型扩展方法var Person = function(){};Person.prototype ={say :function(){console.log("wo shiwuwenzhou")}};常用写法会将C,D结合,构造函数申明属性,原型链扩展方法,但是js中其实并不是严谨区分属性和方法的,原型的写法会导致查询深度变深,性能下降,但结构化清晰。
总结日常使用中用{}键值对的形式结构简单,释义明确,架构时用构造函数加原型扩展结构清晰。在对象的写法上有些注意点,obj[pro]和obj.pro都是可以对象的键去获取对应的值,但[]在写法上具有更高的兼容性,点能出的属性[]也能实现,但[]能够里面能写字符串变量而点不能,在对象方法是可以配置的字符串变量属性时注意用[]这是我在项目中感悟之一,也是项目维护的重要原则之一,多配置而少改代码,配置后到js实例化时的方法名比如是"get" +某个属性名,这时候就点就出不来了用[]比较好。