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


本文主要内容:面向对象

预计阅读时间:6分钟

面向对象的方式

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

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

  • 工厂创建

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

面向对象相关问题

  • 构造函数里的属性怎么看?看this,谁前面有this谁就是属性
function Zhoumao(name, age) {
var name = '昼猫'
this.name = name;
this.age = age; // name 不属于
}
  • 如何查找面向对象中的this
  1. 构造函数里的this执行实例对象

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

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

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

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

function Zhoumao() {
this.name = 'zhoumao'
}
Zhoumao.prototype.age = '12'
Zhoumao.prototype = {
sxc: 44
}
var zm = new Zhoumao
var hello = new Zhoumao
console.log(hello.age) // undefined
  • 如何给内置类添加方法

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

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

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

昼猫笔记 JavaScript -- 面向对象(I)的更多相关文章

  1. 昼猫笔记 JavaScript -- 作用域技巧!!

    简单理解 var zm = function (x) { var code = 'bb' return code }; 学过js的老哥们都知道,当这样简单的一个函数进入浏览器,浏览器开始解释代码,会将 ...

  2. 昼猫笔记 JavaScript -- 异步执行 | 定时器真的定时执行?

      本篇主要内容:异步.定时器引发的思考 预计阅读时间:8分钟 了解 我们都知道在js中定时器有两种  setInterval()  . setTimeout()   setInterval() :按 ...

  3. 昼猫笔记 JavaScript -- 闭包

      本次主要内容是 闭包 阅读时间: 约 3分钟 记得点个赞支持支持我哦 初步了解 先看下代码,输出结果是多少? function fn1 () { var a = 2 function fn2 () ...

  4. 昼猫笔记 -- 面向对象(II) - 继承

    继承 由于js不像java那样是真正面向对象的语言,js是基于对象的,它没有类的概念. 所以,要想实现继承,可以用js的原型prototype机制或者用apply和call方法去实现,还有就是js可以 ...

  5. 昼猫笔记 从此告别复杂代码--JavaScript

    昼猫笔记--给你带来不一样的笔记 不止是笔记 更多的是思考 大家好,我是一只来自喵星的前端初学者,由于我们喵星人科技较为落后,昼猫从今天开始带着使命来到地球学习前端知识. 从今天开始,猫猫我就从Jav ...

  6. 昼猫笔记--什么是DOM

    昼猫笔记--给你带来不一样的笔记 不止是笔记 更多的是思考 Hello,大家好,昼猫,今天来加深下DOM 什么DOM呢?它的全称叫 Document Object Model 通过全称可以知道它是 文 ...

  7. 读书笔记-JavaScript面向对象编程(一)

    PDF下载链接: http://pan.baidu.com/s/1eSDSTVW 密码: 75jr 第1章 引言 1.1 回顾历史 1.2 变革之风 1.3 分析现状 1.4 展望未来 1.5 面向对 ...

  8. 读书笔记-JavaScript面向对象编程(三)

    第7章 浏览器环境 7.1 在HTML页面中引入JavaScript代码 7.2概述BOM与DOM(页面以外事物对象和当前页面对象) 7.3 BOM 7.3.1 window对象再探(所以JavaSc ...

  9. 读书笔记-JavaScript面向对象编程(二)

    第5章 原型 5.1 原型属性(所有函数拥有一个prototype属性,默认为空对象) 5.1.1 利用原型添加方法和属性 function Gadget(name,color){ this.name ...

随机推荐

  1. SurfaceView左右滑动切换黑屏问题解决方式

    在项目中使用的是高德地图,放置MapView的Fragment和其它Fragment放置一个ViewPager中切换:当从MapView的Fragment切换到其它Fragment或者从其它Fragm ...

  2. ubuntu升级到14.04后终端显示重叠

    系统升级后,发现这个问题非常不爽,问题不大,但有时候找不到解决方法,让人纠结好久.解决方法例如以下: 编辑->配置文件首选项->常规-> monospace 改为ubuntu mon ...

  3. less02-变量

    html <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF- ...

  4. xp秘钥

    TDCXC-M9FW9-3HQ28-CPXYR-YXQ3QCCBDF-9W9T8-K8B7M-83HJM-X2MCWP3MF6-BTDKT-KR7YF-X4BM9-4HD9TMCCWF-42JGF-W ...

  5. dedecms4张关键表解析之1

    虽然dedecms默认共有87张表,但是只有4张最核心,最最要的表. 1.第一张表:dede_arctype  栏目表 dede设计者认为不管存放什么样的数据(文章,商品,电影)都应该属于某个栏目(类 ...

  6. Goldengate进程的合并与拆分规范

    Goldengate抽取进程的合并与拆分原则 1.    文档综述 1.1.  文档说明 本文档描述了对GoldenGate的抽取进程进行拆分和合并的基本原则和详细步骤.  1.2.  读者范围 本文 ...

  7. The view 'Index' or its master was not found or no view engine supports the

    ASP.net  MVC 5  WebApi部署IIS提示: 未找到视图“索引”或其母版视图,或没有视图引擎支持搜索的位置.搜索了以下位置: 其他设置一切正常 这种情况很有可能是,1.部署的路径中空格 ...

  8. git 和github 关联

    创建本地仓库: 查看本地仓库配置信息: 如果没有配置,则进行配置: git config --global user.name "这里换上你的用户名" git config --g ...

  9. ES6学习笔记(十三)Iterator遍历器和for...of循环

    1.概念 遍历器(Iterator)就是这样一种机制.它是一种接口,为各种不同的数据结构提供统一的访问机制.任何数据结构只要部署 Iterator 接口,就可以完成遍历操作(即依次处理该数据结构的所有 ...

  10. [HAOI2007][SDOI2005]反素数

    题目:洛谷P1463.BZOJ1053.Vijos P1172.codevs2912. 题目大意:对于任何正整数x,其约数的个数记作g(x).例如g(1)=1.g(6)=4. 如果某个正整数x满足:g ...