从零开始的全栈工程师——JS面向对象( 原型 this 继承)
一、生成对象的方式
①单例模式(字面量定义)var obj = {}
②类的实例 var obj = new Object( )
③工厂模式
④构造函数:扮演三种角色 普通函数 普通对象 类
工厂模式
构造函数
构造函数如果人为return的不是对象 直接忽略 如果人为return的是对象 就取代this <-- ! ! ! ! ! ! ! ! !
二、工厂模式和构造函数的区别
1. 工厂模式 生成的对象必须要返回 构造函数模式不用return
构造函数模式默认return的是this 在构造函数内的this就是实例对象
2.工厂模式生成的实例对象的__proto__直接指向基类Object的原型
构造函数生成的实例对象的__proto__指向他父类的原型 然后父类的原型上的__proto__指向基类Object的原型
三、实例
1.
每个实例和实例之间都是独立的个体 他们之间的属性互不干扰 是不等的 如果实例和实例之间的属性相对
则这个属性必须是父类的原型上的属性 是因为父类原型上的属性是可继承的 是共享的
( 每个实例对象都会生成一个独立空间 并且互不干扰 )
2.原型链
在操作obj.属性的时候 首先看这个属性是私有的还是从父类的原型上继承的 如果是私有的直接使用
如果私有的没有就查看父类的原型上有没有 如果有就直接使用 如果没有 再次向父类的父类的原型查找
直到找到Object位置 如果object也没有就得到undefined 这就是原型链

3.实例对象的原型就是他父类的原型
4.破坏原型链
如果不给类的原型指定一个对象 这个实例对象的__proto__上有一个constructor的属性
如果给这个类的原型上指定了一个对象 实例上的__proto__就没有constructor属性了
构造函数里的原型里的this都是指向实例对象

四、原型上的方法
1.instanceof 判断一个对象是不是这个类的方法

2.isPrototypeOf 判断一个对象是否是另一个对象的原型
3.getPrototypeOf 获取实例对象的原型 前面一定要是Object

4.hasOwnProperty 判断一个属性是不是自身私有的属性 括号后面加引号

5.in 判断这个属性是不是在这个对象上 不管是私有的还是公有的


五、this
1.this的指向
①this是一个对象 函数外的this都指向window
②函数内的this 他的指向跟函数调用有关 看函数前面有没有“.” 有“.”就指向“.”前面的对象 没有就指向window
③定时器里的this永远是window 自执行函数里的this是window
④构造函数里的this和原型上的this都指向实例对象
2.改变this指向的方法
①提前将this赋值 ②call ③applay ④bind
六、继承
1.call继承 --> 将父类的私有属性继承为子类的私有属性
function A () {
this.name = 'hua';
}
function B () {
this.age = 12;
A.call(this)
}
var a = new A()
var b = new B()
console.log(b.name) //hua
2.原型继承 --> 将父类的私有和公有属性都继承为子类的公有属性 子类的原型 = 父类的实例 B.prototype=new A()
function A () {
this.name = 'hua';
}
A.prototype.ss='sss';
function B () {
this.age = 12;
}
B.prototype = new A; //子类的原型等于父类的实例
var a = new A()
var b = new B()
console.log(b.ss)
从零开始的全栈工程师——JS面向对象( 原型 this 继承)的更多相关文章
- 从零开始的全栈工程师——JS面向对象( 六大继承 )
一.对象克隆 var obj = { name:'li', age:23 } var obj2 = obj; // 这不是对象克隆 只是把obj的内存地址给obj2 1.for in克隆(浅拷贝) ...
- 从零开始的全栈工程师——JS面向对象(复习)
作用域 栈内存:js执行的环境堆内存:存放代码块的空间 存放方式 键值对形式存放 字符串的形式存放js在执行之前 浏览器会给他一个全局作用域叫window 每个作用域下都分为两个模块 一个是内存模块一 ...
- 从零开始的全栈工程师——JS面向对象(初篇)
面向对象编程 面向对象编程是用抽象方式创建基于现实世界模型的一种编程模式.它使用先前建立的范例,包括模块化,多态和封装几种技术.今天,许多流行的编程语言(如Java,JavaScript,C#,C+ ...
- 从零开始的全栈工程师——js篇2.12(面向对象)
面向对象 Js一开始就是写网页特效,面向过程的,作者发现这样写不好,代码重复利用率太高,计算机内存消耗太大,网页性能很差. 所以作者就收到java和c的影响,往面向对象靠齐.Js天生有一个Object ...
- 从零开始的全栈工程师——js篇(作用域 this 原型笔试题练习)
作用域 // 1. fn() function fn () { console.log(12) } var as = function () { console.log(45) } // 2. var ...
- 从零开始的全栈工程师——js篇2.11(原型)
原型 原型分析 1.每个 函数数据类型(普通函数,类)都有一个prototype属性 并且这个属性是一个对象数据类型2.每个Prototype上都有一个constructor属性 并且这个属性值是当前 ...
- 从零开始的全栈工程师——js篇2.20(事件对象 冒泡与捕获)
一.复习 面向对象 1)单例模式 2)工厂模式 3)构造函数 ①类js天生自带的类 基类object function array number math boolean date regexp st ...
- 从零开始的全栈工程师——js篇2.10(对象与构造函数)
对象与构造函数 一.js数据类型 基本数据类型:string undefined null boolean number 引用数据类型 Object array function 二 ...
- 从零开始的全栈工程师——js篇2.5
数据类型与全局属性 js的本质就是处理数据 数据来自于后台的数据库所以变量就起到一个临时存储数据的这作用ECMAscirpt 制定了js的数据类型 一.数据类型 1.基本数据类型 基本数据类型就是简单 ...
随机推荐
- P2925 [USACO08DEC]干草出售Hay For Sale 题解
\(\Huge{dp第一题}\) 题目描述 农民john面临一个很可怕的事实,因为防范失措他存储的所有稻草给澳大利亚蟑螂吃光了,他将面临没有稻草喂养奶牛的局面.在奶牛断粮之前,john拉着他的马车到农 ...
- cnd 计费流量查询服务模块设计与实现
一.cdn模块结构: 2.内部模块结构:
- GCD - Extreme (II) UVA - 11426 数学
Given the value of N , you will have to nd the value of G . The de nition of G is given below: G = i ...
- jquery实现下拉菜单
需要实现的效果如图: <!DOCTYPE html> <html> <head lang="en"> <meta charset=&quo ...
- 包括ES6在内的数组操作(待更)
下面是我对ES6和古老的JS(ES3)一些数组操作的总结,附带了一些我曾经用上的. map处有待更内容. 贴一下有借鉴的网站:https://segmentfault.com/a/1190000002 ...
- 【算法笔记】B1014 福尔摩斯的约会
1014 福尔摩斯的约会 (20 分) 大侦探福尔摩斯接到一张奇怪的字条:我们约会吧! 3485djDkxh4hhGE 2984akDfkkkkggEdsb s&hgsfdk d&Hy ...
- gym101201J Shopping 二分+RMQ+数学性质
题目传送门 题目大意: 给出n个商品的价格,排成一列,q次查询,每次查询如果你有x的钱,从l格子走到r格子,每种商品有无数个,能买就买,最后还会剩多少钱. 思路: 每一次买都要找离自己最近的且买的起的 ...
- SQL数据库查询一列数据返回一行
SQL:数据库合并列数据:遇到一个更新的问题 想要把查询到的数据某一列拼接成字符串形式返回用的是SQL数据库中的STUFF函数比如 查询到的表(u_College)如下Id Name Age Clas ...
- cmd命令行编译c/c++程序
一.打开文件夹(文件夹名字为123,文件夹里面有程序345.cpp) cd 123 二.在cmd里面编译程序 1.cd Desktop //在打开文件夹之前不回到桌面会出错 2.cd 123 ...
- webgoat环境搭建
链接: https://pan.baidu.com/s/1gfEKIyB 密码: 5zdq 1:配置Java环境变量,过程请找度娘 2:解压下载好的tomcat 3:将webgoat-containe ...