js的面向对象编程总结

关于js对象编程的一些个人总结

1 js中一切类型的contructor属性都是Function

2 多个构造函数可以指向一个原型对象 指向原型对象后的构造函数就具有原型对象的方法 当该构造函数实例化后就可以使用该对象中的方法 多用于亨原模式 减少多个函数中重复的代码

3 js的继承和多态 js原型之间通过原型链连接在一起 而实例对象调用的方法或属性在自己的构造函数或原型没找的话就会顺着原型链去找 原型继承多用object.setprototypeof()或object.__proto__来实现继承,

每一个构造函数实例化后 该实例化的对象都会有一个__proto__属性执行该构造函数的prototype原型对象

实例化后的对象可以实现自己的方法来覆盖自己父对象的方法来实现多态 编程时 应该先将整个程序分块 然后分析每块中的相同部分和不同部分 将相同部分用构造函数和原型方法的形式表达出来 将不同部分用继承的方式继承公用部分的原型(注意:当在构造函数中调用公共构造方法时 要绑定this) 也可以在其中编写自己的方法实现多态 

4 对象原型中有很多方法都被后来的继承的函数或数组等重写 所以当调用对象原型的方法时 要用Object.prototype.方法.call()来实现原型方法的调用 如Object.prototype.hasOwnProperty.call(obj,key)和Object.prototype.toString.call(obj)来判断obj的具体类型 是object 或array 或function 原型方法中的this可以通过call或apply替换为其他对象

5 Object.defineProperty(obj,"key",function(){

get:function(){},当读取该对象中的属性时调用该函数

set:function(newvalue){},当设置该对象的属性时自动调用该函数

configurable:该属性不可以删除 当设为false后其他属性就不可以设置 否则会报错:Uncaught TypeError: Cannot redefine property: name

enumerable:该属性不可以通过for in来遍历

writable:该属性只读 不可以修改

})

6 面向对象编程时 注意局部变量和全局变量的使用 尽量少用全局变量 状态变量和函数多放到执行函数中立即执行 而需要暴露给外面的函数和变量可以放到对象里 在函数的最后return 

猜你喜欢

转载自blog.csdn.net/margin_0px/article/details/81287201