对象 是什么?

  对象就是一个整体,对外提供一些操作,比如:电视机(不用知道内部的构造,只知道怎么用)

面向对象 是什么?

  使用对象时,只关注对象提供的功能,不关心内部细节,比如:操作电视机(只知道用遥控器控制)

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 之面向对象的更多相关文章

  1. JavaScript--我发现,原来你是这样的JS:面向对象编程OOP[1]--(理解对象和对象属性类型)

    一.介绍 老铁们,这次是JS的面向对象的编程OOP(虽然我没有对象,心累啊,但是可以自己创建啊,哈哈). JS高程里第六章的内容,这章内容在我看来是JS中很难理解的一部分.所以分成三篇博客来逐个理清. ...

  2. JavaScript--我发现,原来你是这样的JS:面向对象编程OOP[2]--(创建你的那个对象吧)

    一.介绍 我们继续面向对象吧,这次是面向对象编程的第二篇,主要是讲创建对象的模式,希望大家能从博客中学到东西. 时间过得很快,还是不断的学习吧,为了自己的目标. 二.创建对象 1.前面的创建对象方式 ...

  3. JS--我发现,原来你是这样的JS:面向对象编程OOP[3]--(JS继承)

    一.面向对象编程(继承) 这篇博客是面向对象编程的第三篇,JS继承.继承顾名思义,就是获取父辈的各种"财产"(属性和方法). 怎么实现继承? 我们的JavaScript比较特别了, ...

  4. JS--我发现,原来你是这样的JS:面向对象编程OOP[2]--(创建你的那个对象吧)

    一.介绍 我们继续面向对象吧,这次是面向对象编程的第二篇,主要是讲创建对象的模式,希望大家能从博客中学到东西. 时间过得很快,还是不断的学习吧,为了自己的目标. 二.创建对象 1.前面的创建对象方式 ...

  5. JavaScript基础笔记(四) JS式面向对象

    JS式面向对象 一.理解对象 一)属性类型 ECMA-262 第 5 版在定义只有内部才用的特性(attribute)时,描述了属性(property)的各种特征. ECMA-262 定义这些特性是为 ...

  6. JS--我发现,原来你是这样的JS:面向对象编程OOP[1]--(理解对象和对象属性类型)

    一.介绍 老铁们,这次是JS的面向对象的编程OOP(虽然我没有对象,心累啊,但是可以自己创建啊,哈哈). JS高程里第六章的内容,这章内容在我看来是JS中很难理解的一部分.所以分成三篇博客来逐个理清. ...

  7. 学JS的心路历程-JS支持面向对象?(一)

    昨天在看Prototype看到JS支持面向对象,被前辈问到说那什么是面向对象?JS是面向对象语言吗? 便开始了一连串艰辛爬文过程,今天就来看一下两者有什么差异吧(rgwyjc)! 首先面向对象有三大特 ...

  8. 探讨 JS 的面向对象中继承的那些事

    最近学了 JS 的面向对象,这篇文章主要是探讨 JS 的面向对象中继承的那些事. JS中继承的特点: 1.子类继承父类: 2.子类可以用父类的方法和属性 3.子类的改变可以不影响父类 下面用一个例子来 ...

  9. 重学前端--js是面向对象还是基于对象?

    重学前端-面向对象 跟着winter老师一起,重新认识前端的知识框架 js面向对象或基于对象编程 以前感觉这两个在本质上没有什么区别,面向对象和基于对象都是对一个抽象的对象拥有一系列的行为和状态,本质 ...

随机推荐

  1. 【SSH】——spring的控制反转和依赖注入

    spring是一个轻量级的容器框架,主要是为了使企业的开发变得简单.高效.无论是从大小还是开销来讲,他都可以算是轻量级的,也是非侵入性的. 下图是spring的框架示意图,说到spring,就不得不提 ...

  2. # centos7下FFmpeg环境部署记录

    # centos7下FFmpeg环境部署记录 随着视频在网站上的应用越来越多,越来越多的网站服务器需要支持视频转码,视频压缩,FFmpeg是目前最好用的网站服务器后台转码程序,应用最多.FFmpeg是 ...

  3. IPVS和Nginx两种WRR负载均衡算法详解

    动机 五一临近,四月也接近尾声,五一节乃小长假的最后一天.今天是最后一天工作日,竟然感冒了,半夜里翻来覆去无法安睡,加上窗外大飞机屋里小飞机(也就是蚊子)的骚扰,实在是必须起来做点有意义的事了!    ...

  4. 【BZOJ 2879】[Noi2012]美食节 费用流

    思路同修车,就是多了一个骚气的操作:动态加边,我们通过spfa流的过程可以知道,我们一次只会跑一流量,最后一层边跑过就不会再悔改,所以说我们只会用到一大片里面的很少的点,所以我们如果可以动态加边的话我 ...

  5. React & Redux 的一些基本知识点

    一.React.createClass 跟 React.Component 的区别在于后者使用了ES6的语法,用constructor构造器来构造默认的属性和状态. 1. React.createCl ...

  6. JavaScript的大括号的语义

    Javascript中大括号"{}"有四种语义作用: 语义1. 组织复合语句,这是最常见的: view source   print? 1 if( condition ) { 2 ...

  7. IE浏览器被固定启动时访问某网页的处理方法

    一.问题的提出 有些windows的GHOST系统在镜像成使用系统后或者正规安装的windows系统在安装金山毒霸.360杀毒软件后,IE浏览器一打开就自动打开某个指定的网站. 二.问题的分析 1.I ...

  8. OSI 七层模型和 TCP/IP 四层模型 及 相关网络协议

    简介 OSI 是理论上的模型,也就是一个统一的国际标准,现在的很多网络设备或者是网络协议都不同程度的精简了自己的所谓的模型,那么他们为了自己的通讯兼容都会参考这个OSI模型 TCP/IP 包括: TC ...

  9. Ubuntu 编译Webkit --gtk

    转载自:http://www.linuxidc.com/Linux/2011-10/44809.htm webkit是一个浏览器内核,google的chrome就是基于它的,下面介绍一下如何在Ubun ...

  10. matlab求矩阵的鞍点

    function count = andian(a) v = max(a,[],2); count = 0; for i=1:length(v) [r2,c2] = find(a==v(i)); mi ...