js 之面向对象
对象 是什么?
对象就是一个整体,对外提供一些操作,比如:电视机(不用知道内部的构造,只知道怎么用)
面向对象 是什么?
使用对象时,只关注对象提供的功能,不关心内部细节,比如:操作电视机(只知道用遥控器控制)
JS的面向对象
特点:
1.抽象:抓住问题的核心
2.封装:不考虑内部细节,只考虑外部使用
3.继承:从已有的对象上,继承新的对象
·多重继承
·多态(少用)
对象的组成: | var cat = {
1.属性(变量) | cat.name = '小妮'; //属性
2.方法(函数) | cat.show= function(){ //方法
| alert('喵喵');
| }}
一、原始的对象
var cat1 = new object();
cat1.name="小妮";
cat1.show = function(){
alert('我的名字叫:'+this.name)
};
var cat2 = new object();
cat2.name="小明";
cat2.show = function(){
alert('我的名字叫:'+this.name)
}; //调用
cat1.show(); //我的名字叫:小妮
cat2.show(); //我的名字叫:小明
这时候如果想创建多一个对象,需要把上面的整个copy多一次,但这造成很多重复,超级乱。所以有了第二种进阶,构造函数
二、构造函数
function Cat(name){
var cat = new object();
cat.name=name;
cat.show = function(){
alert('我的名字叫:'+this.name);
};
rerurn cat;
}
//调用
var cat1 = Cat('小妮');
cat1.show(); //我的名字叫:小妮
var cat2 = Cat('小明');
cat2.show(); //我的名字叫:小明
然而这种方式有个很大的缺点
alert(cat1.show == cat2.show); //false
这就意味着,每一个新创建的对象都拥有自己的一个方法,尽管方法是一模一样的。这件造成很大的浪费,占据资源。所以有了第三种Prototype模式
三、Prototype模式
首先说一下什么是prototype?
.box{color:"#white";}
<div class="box" style="color:#blue"></div>
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
//相信会点CSS的人也知道,第一个颜色因为行间样式变成blue,其与三个是white,原型的对应关系如下
// CSS JS
// class(一次给一组加样式) 原型
// style(一次给一个加样式) 给对象单独加事件
再来点JS例子:
var arr1 = new Array(1,2,3,4);
var arr2 = new Array(5,6,7,8); Array.prototype.sum = function () { //class方法 全部都有
//arr1.prototype.sum = function () { //style 行间 只有一个有
var result = 0;
for (var i = 0; i < this.length; i++) {
result += this[i];
}
return result;
}; alert(arr1.sum());
alert(arr2.sum());
如果用 arr1.prototype.sum arr2也要调用sum 将会报错,当加在Array共有的类上,才能共享。
同时要注意prototype是加在类上,方法是被对象调用
//错误: Array.push();
//错误: new arr();
//正确: arr.push();
//正确: Array.arr()
言归正传,上面的例子改写为:
function Cat(name){
this.name=name;
}
Cat.prototype.show = function(){
alert('我的名字叫:'+this.name);
};
//调用
var cat1 = new Cat('小妮');
var cat2 = new Cat('小明');
cat1.show(); //我的名字叫:小妮
cat2.show(); //我的名字叫:小明
alert(cat1.show == cat2.show );//true
构造函数加属性,原型加方法,这样就解决了资源浪费。
以上就是一个面向对象的写法。
更新待续.......
js 之面向对象的更多相关文章
- JavaScript--我发现,原来你是这样的JS:面向对象编程OOP[1]--(理解对象和对象属性类型)
一.介绍 老铁们,这次是JS的面向对象的编程OOP(虽然我没有对象,心累啊,但是可以自己创建啊,哈哈). JS高程里第六章的内容,这章内容在我看来是JS中很难理解的一部分.所以分成三篇博客来逐个理清. ...
- JavaScript--我发现,原来你是这样的JS:面向对象编程OOP[2]--(创建你的那个对象吧)
一.介绍 我们继续面向对象吧,这次是面向对象编程的第二篇,主要是讲创建对象的模式,希望大家能从博客中学到东西. 时间过得很快,还是不断的学习吧,为了自己的目标. 二.创建对象 1.前面的创建对象方式 ...
- JS--我发现,原来你是这样的JS:面向对象编程OOP[3]--(JS继承)
一.面向对象编程(继承) 这篇博客是面向对象编程的第三篇,JS继承.继承顾名思义,就是获取父辈的各种"财产"(属性和方法). 怎么实现继承? 我们的JavaScript比较特别了, ...
- JS--我发现,原来你是这样的JS:面向对象编程OOP[2]--(创建你的那个对象吧)
一.介绍 我们继续面向对象吧,这次是面向对象编程的第二篇,主要是讲创建对象的模式,希望大家能从博客中学到东西. 时间过得很快,还是不断的学习吧,为了自己的目标. 二.创建对象 1.前面的创建对象方式 ...
- JavaScript基础笔记(四) JS式面向对象
JS式面向对象 一.理解对象 一)属性类型 ECMA-262 第 5 版在定义只有内部才用的特性(attribute)时,描述了属性(property)的各种特征. ECMA-262 定义这些特性是为 ...
- JS--我发现,原来你是这样的JS:面向对象编程OOP[1]--(理解对象和对象属性类型)
一.介绍 老铁们,这次是JS的面向对象的编程OOP(虽然我没有对象,心累啊,但是可以自己创建啊,哈哈). JS高程里第六章的内容,这章内容在我看来是JS中很难理解的一部分.所以分成三篇博客来逐个理清. ...
- 学JS的心路历程-JS支持面向对象?(一)
昨天在看Prototype看到JS支持面向对象,被前辈问到说那什么是面向对象?JS是面向对象语言吗? 便开始了一连串艰辛爬文过程,今天就来看一下两者有什么差异吧(rgwyjc)! 首先面向对象有三大特 ...
- 探讨 JS 的面向对象中继承的那些事
最近学了 JS 的面向对象,这篇文章主要是探讨 JS 的面向对象中继承的那些事. JS中继承的特点: 1.子类继承父类: 2.子类可以用父类的方法和属性 3.子类的改变可以不影响父类 下面用一个例子来 ...
- 重学前端--js是面向对象还是基于对象?
重学前端-面向对象 跟着winter老师一起,重新认识前端的知识框架 js面向对象或基于对象编程 以前感觉这两个在本质上没有什么区别,面向对象和基于对象都是对一个抽象的对象拥有一系列的行为和状态,本质 ...
随机推荐
- php在类里如何调用call_user_func_array《细说php2》
- 【题解】SDOI2014数数
真的很开心呢,总算是有一道完完全全由自己做出来的题目啦~ 这一道题目洛谷P3311和另一道JSOI文本生成器的题目是十分相像的,dp方面几乎相同.只是<=n的约束,让这道题目必须结合数位dp的方 ...
- 通过init-connect + binlog 实现MySQL审计功能
背景: 假设这么一个情况,你是某公司mysql-DBA,某日突然公司数据库中的所有被人为删了. 尽管有数据备份,但是因服务停止而造成的损失上千万,现在公司需要查出那个做删除操作的人. 但是拥有数据库操 ...
- Codeforces Round #350 (Div. 2) A
A. Holidays time limit per test 1 second memory limit per test 256 megabytes input standard input ou ...
- Codeforces Round #538 (Div. 2) (A-E题解)
Codeforces Round #538 (Div. 2) 题目链接:https://codeforces.com/contest/1114 A. Got Any Grapes? 题意: 有三个人, ...
- Good Substrings CodeForces - 271D
You've got string s, consisting of small English letters. Some of the English letters are good, the ...
- hadoop 架构
- Oracle查询字段内容为非数字的记录
今天在一张3W多记录的表里查非数字的异常数据~数据库太水,记录一发,因为2.5使用人员误输入为2..5.... select t.routecardlist_id,trim(translate(RTR ...
- 网络流专题练习Day1
04/16 一共做了8道题 首先网络流目前自己掌握的只有最大流Dinic算法和普通的费用流算法 有空还要去学习一下SAP和ZKW费用流(flag早早立在前面以后看到都有动力... 但网络流的算法个人认 ...
- unity中绘制战争迷雾
接上一篇中说的游戏,我们已经实现了client.host上的一个物体可见不可见的行为.之后我们可以加入类似检查两个单位之间的距离.或是两个单位之间有无阻挡物来进一步实现游戏机制. 在这篇随笔中我会首先 ...