JavaScript(十三)面向对象
面向对象
面向对象的过程
通过new 构造函数 生成的对象来执行, 类似于事件的执行 this指向函数,然后再把这个函数赋值给一个实例 所以在函数内的this 就指到了实例上
function Person (age,lastname,) {
this.age = age
this.lastname = lastname;
}
var xiaoming = new Person(12,'小明');
console.log(xiaoming);

构造函数的首字母要大写 大家默认的规范
对象中若 value 非函数 叫做属性 若 是函数 叫方法
this的指向
普通对象,计时器,定时器,this 质量window
对象中的方法的this 指向这个对象,这个对象就和windows类似
绑定事件时 this指向 dom对象
闭包的this 指向上次运行的函数环境
自执行函数 指向window
对象中的定时器等的this仍是指向window 所以需要在对象内备份 this
实例与构造函数的关系
新生成的对象 有个属性 constructor 就是这个对象的构造函数
实例 instanceof 构造函数 ---->true
console.log(xiaoming.constructor);
console.log(xiaoming instanceof Person);

面向对象中的类的概念
就是 构造函数 ,同一个构造函数 new出来的 就属于一个类
原型
构造函数方法存在一定的弊端,对于对象中一成不变的属性 并不需要每次都new ,这样很浪费性能,那么 就把这用一成不变的存储到 构造函数的原型上面
function Person (age,name,) {
this.age = age;
this.name = name;
}
Person.prototype.sex = 'male';
var xiaoming = new Person(12,'xiaoming');
console.log(xiaoming.sex);//这个性别就是从原型上继承的
构造函数的原型除了以 fun.prototype.attr = ***; 的格式
还可以 写整个 原型
Person.prototype = {
age : ,
sex:'male',
constructor : Person //这里如果不写 new的实例调用constrotur 不会返回person 而返回 Object
}
prototype和__proto__
prototype 所有的函数都有原型prototype
.__proto__ 所有的对象都有原型对象 ∵所有的对象都是用构造函数创建的
constructor,protype与__proto__
判断这个实例是不是这个构造函数new的
构造函数的原型 .isProtypeOf(新对象)

利用 in 结合 hasOwnProperty判断是不是从原型继承来的属性
for (var pro in xiaoming) {
if(xiaoming.hasOwnProperty(pro)){
console.log(pro + '是本地属性')
}
}

绑定构造函数 两个对象(构造函数之间)继承
1.call / apply 用父类 代替子类的this
父构造函数.call(this,[arguments])
function Foo () {
this.lastName = 'wang';
}
function Son (height) {
Foo.call(this); //就这一步就可以继承来 Foo的属性
this.height = height;
}
var xw = new Son(180);
console.log(xw.lastName); //wang
prototype的继承方法
写在perotype 上的属性在生成实例的时候不会被 调用 所以 实例上的属性由继承来的更好 提取公共部分在原型上
function Foo() {
this.firestName = '老王';
}
Foo.prototype.lastName = 'wang';
function Son() {
this.firstName = '小王';
}
Son.prototype = new Foo();
Son.prototype.constrotur = Son;
var xw = new Son();
console.log(xw.firstName);
console.log(xw.lastName);
console.log(xw.constrotur);

利用空的函数的prototype 实现继承
function extend(parent, child) {
var F = function(){};
F.prototype = parent.prototype;
child.prototype = new F();
child.prototype.constructor = child;
child.uber = parent.prototype;
}
拷贝继承 就是把parent.protype 上的属性 遍历拷贝到 child 的protype上
function copy(parent, child) {
var p = parent.prototype;
var c = child.prototype;
for (var pro in p) {
c[pro] = p[pro]; //这里的pro是属性名!!!!是字符串形式的 所以只能用[]的形式
}
c.uber = p;
}
JavaScript(十三)面向对象的更多相关文章
- JavaScript的面向对象编程(OOP)(一)——类
在学习JavaScript面向对象的编程之前,需要知道,并了解面向对象的一些基本的常识.初学者中大多数都以为面向对象中,面向对象的编程是很重要和占据很大一部分精力.笔者在之前也是认为OOP是面向对象的 ...
- javascript进阶——面向对象特性
面向对象的javascript是这门语言被设计出来时就考虑的问题,熟悉OOP编程的概念后,学习不同的语言都会发现不同语言的实现是不同的,javascript的面向对象特性与其他具有面向对象特性的语言的 ...
- javascript的面向对象详解
每次说到javascript到面向对象,总感觉自己心里懂,但是却不知道该怎么说,这就是似懂非懂到表现,于是乎,每次一说,就要到处去查找资料,零零碎碎到看了一些,感觉有懂了,但是过段时间,好像又不知道是 ...
- 浅谈JavaScript的面向对象程序设计(四)
本文继续讲解JavaScript的面向对象程序设计.继承是面向对象语言中的一个基本概念,面向对象语言支持两种继承实现方式:接口继承和实现继承.接口继承只继承方法签名,而实现继承则继承实际的方法.但是在 ...
- JavaScript的面向对象原理之原型链详解
一.引言 在16年的10月份,在校内双选会找前端实习的时候,hr问了一个问题:JavaScript的面向对象理解吗?我张口就说“JavaScript是基于原型的!”.然后就没什么好说的了,hr可能不知 ...
- 从 prototype.js 深入学习 javascript 的面向对象特性
从 prototype.js 深入学习 javascript 的面向对象特性 js是一门很强大的语言,灵活,方便. 目前我接触到的语言当中,从语法角度上讲,只有 Ruby 比它更爽. 不过我接触的动态 ...
- javascript 的面向对象特性参考
最近在看用javascript+css实现rich client.javascript 也是一个蛮有意思的语言.特别是其面向对象的实现和其他“标准”的OO launguage有很大的不同.但是,都是动 ...
- JavaScript高级 面向对象(5)--内存逻辑图画法
说明(2017.3.30): 1. 使用软件diagram designer,DiagramDesignerSetup1.28.zip,很小只有1M多,我用的自带画图软件.教学视频是“JavaScri ...
- javascript中面向对象的5种写法
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- (一)我的Javascript系列:Javascript的面向对象旅程(上)
今宵酒醒何处,杨柳岸,晓风残月 导引 我的JavaScript系列文章是我自己对JavaScript语言的感悟所撰写的系列文章.现在还没有写完.目前一共出了下面的系列: (三)我的JavaScript ...
随机推荐
- 当遇到Mac的Excel或者Word老是重复崩溃的时候
打开Number,新建文件然后导出为Excel.之后再用Excel打开,一切都OK了.
- linux网络编程中的shutdown()与close()函数
1.close()函数 int close(int sockfd); //返回成功为0,出错为-1 close 一个套接字的默认行为是把套接字标记为已关闭,然后立即返回到调用进程,该套接字不能再由cl ...
- DOM对象与jquery对象的互相转换
一開始总是对DOM对象和jQuery对象搞不清楚.如今对此做一下总结: DOM 对象:文档对象模型.每一份DOM都能够看作一棵树.像ul,li ol dl p h1 等等都是DOM元素节点.能 ...
- 我怎么在AD里面找到已经改名的Administrator账户?
近期有博友问我一个问题,他是一个企业里面的IT管理员,他非常苦恼.他是一个新手,之前管理员交接的时候,没有交接更改的管理员username和password.他如今不知道哪个才是系统之前内置的admi ...
- C#.NET 如何快速输入一个对象事件对应的方法
直接在Textbox图像对象中找到这个对象的KeyPress方法,然后输入触发的事件名称.效率更高,不容易出错. "void TypeAreaKeyPress(object sender, ...
- manacher hihoCoder1032 最长回文子串
居然能够做到O(n)的复杂度求最长回文.,也是给跪了. 以下这个人把manacher讲的很好,,能够看看 http://blog.csdn.net/xingyeyongheng/article/det ...
- mongodb配置主从模式
Mongodb的replication主要有两种:主从和副本集(replica set).主从的原理和mysql类似,主节点记录在其上的所有操作oplog,从节点定期轮询主节点获取这些操作,然后对自己 ...
- Centos7 防火墙firewalld配置
开启80端口 firewall-cmd --zone=public --add-port=80/tcp --permanent 出现success表明添加成功 移除某个端口 firewall-cmd ...
- 【Dairy】2016.10.30 BirthdayParty
今天又有人生日耶,鹏哥和骥哥两兄弟,Happy Birthday 开始听到这件事,我傻逼的想了一下,咦,这两人这么有缘,同一天生日...脑抽了... 小胖犇极缓音调来了首烟花易冷,劲啊! 发张什么图呢 ...
- 第十一周 Leetcode 576. Out of Boundary Paths (HARD) 计数dp
Leetcode 576 给定一个二维平面, 一个球在初始位置(i,j)每次可以转移到上下左右的一格. 问在N次转移内,有多少种路径可以转移出边境. dp[i][j][k]为 在点(i,j) 已经走了 ...