本文内容搬运自公众号 原文链接


 

本文主要内容:面向对象

预计阅读时间:6分钟

 

面向对象的方式

  • 单例模式(字面量定义) var obj = {}

  • 类的实例 var obj = new Object()

  • 工厂创建

  • 构造函数 扮演了三种角色,(普通函数、普通对象、类)

 

  • 构造函数里的属性怎么看?看this,谁前面有this谁就是属性
  1. function Zhoumao(name, age) {
  2. var name = '昼猫'
  3. this.name = name;
  4. this.age = age; // name 不属于
  5. }

 

  • 如何查找面向对象中的this
  1. 构造函数里的this执行实例对象

  2. 如果是方法中的this,分以下几种情况
    a. 找到this 在调用方式时,看方法前的 . 是谁,this就是谁
    b. 替换this 将this化成找到的那个结果
    c. 精确查找 用原型链查找模式

  3. 关于构造函数中的返回值
    构造函数也是函数,每个函数都有返回值,构造函数返回的是this

  4. 原型的批量添加和直接对象添加的区别

如果是批量添加属性,没有改变原型的内存地址(浏览器开辟)
如果是以对象形式添加,就会更改原型的内存地址,浏览器开辟的就会销毁

  1. function Zhoumao() {
  2. this.name = 'zhoumao'
  3. }
  4. Zhoumao.prototype.age = '12'
  5. Zhoumao.prototype = {
  6. sxc: 44
  7. }
  8. var zm = new Zhoumao
  9. var hello = new Zhoumao
  10. console.log(hello.age) // undefined

 

  •  如何给内置类添加方法

如果给内置类的原型添加方法,使用对象形式添加,不起作用。因为浏览器会保护内置类对象的原型内存地址,只能使用批量的形式添加方法

  1. // 这种方法是错的
  2. Array.prototype = {
  3. sum: function () {}
  4. // 只能用这种方法添加
  5. Array.prototype.sum = function () {}
  6. }
  • 拷贝

    • 浅拷贝:利用 for in 将一个对象的属性,一个一个的复制到另一个对象中
  1. var obj = {
  2. name: '昼猫',
  3. age: '12'
  4. }
  5. var obj2 = {}
  6. for(var key in obj){
  7. obj2[key] = obj[key]
  8. }
  9. console.log(obj2)
    • 深拷贝:如果对象中的属性值又是一个引用数据类型,浅拷贝,还是把后面的引用数据类型的地址赋值给空对象的属性,深拷贝,将属性值一个个遍历赋值
  1. //将其打包,方便以后使用
  2. function extend(oldObj, newObj) {
  3. for (var key in oldObj) {
  4. var item = oldObj[key]
  5. if (item instanceof Array) { // 数组
  6. newObj[key] = []
  7. extend(item, newObj[key])
  8. } else if(item instanceof Object){ // 对象
  9. newObj[key] = {}
  10. extend(item, newObj[key])
  11. }else { // 基本类型
  12. newObj[key] = item
  13. }
  14. }
  15. }

  1. var obj = {
  2. name: '昼猫',
  3. age: '12',
  4. ss: ['1', '2', '3'],
  5. ssObj: {
  6. sex: '男',
  7. node: '昼猫笔记',
  8. fun: function () {
  9. console.log(111)
  10. } }
  11. }
  12. var obj2 = {}
  13. function extend(oldObj, newObj) {
  14. for (var key in oldObj) {
  15. var item = oldObj[key]
  16. if (item instanceof Array) { // 数组
  17. newObj[key] = []
  18. extend(item, newObj[key])
  19. } else if(item instanceof Object){ // 对象
  20. newObj[key] = {}
  21. extend(item, newObj[key])
  22. }else { // 基本类型
  23. newObj[key] = item
  24. }
  25. }
  26. }
  27. extend(obj, obj2);
  28. console.log(obj2);

View Code

 

版权声明:本文为zhoumao原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/zhoumao/p/10247868.html