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

构造函数加属性,原型加方法,这样就解决了资源浪费。

以上就是一个面向对象的写法。

更新待续.......

时间: 2024-10-13 19:24:10

js 之面向对象的相关文章

JS的面向对象编程

//JS的面向对象编程 在这里,原型对象就是类,JS中一切都是类 使用构造函数定义类,再定义对象实例 This指针每个对象都有一个副本,在函数外可以访问,实现JAVA公有变量和成员变量功能 This包含在一个函数中,指代函数的调用者 Prototype可以使属性方法等重用,实现JAVA中函数和静态变量功能 For(var Key in person1){ person1[Key]; } Prototype不能调用私有变量和方法 对象冒充形式实现继承(多重继承) function Person()

笔记-[面向对象]-JS基于面向对象编程-[1]

面向对象(oop):是一种开发过程中,以面向对象的一种编程思维进行开发. 在JS中,我们一般采用的是面向过程的开发. 面向对象的特点:抽象.封装.继承.多态 先看看自定义对象如何写:自定义一个人的对象,人的名字,年龄,或者是说话.在下面,name age是这个人的属性,说话是这个人的一种行为,也可以叫方法.这样也可以理解为一个简单的面向对象的编程.对象从哪里来,如 var arr=new Array();这个就是一个数组的对象,它从js的一个内定的系统方法类来的. 例如:定义一个人的类,每一个人

笔记-[面向对象]-JS基于面向对象编程-[2]

下面是一个类定义私有属性的例子,和如何在类外部调用类内容的私有属性, <script type="text/javascript">var people=function(name,work,address){ var marry=1;//定义一个私有属性 marry  私有属性和私有方法在外部不可以直接调用访问 this.name=name; this.work=work; this.address=address; this.calls=function(){ aler

前端 之 JavaScript : JS的面向对象; 定时器; BOM

JS的面向对象 定时器 BOM JS的面向对象 创建对象的几种常用方式 1.使用Object或对象字面量创建对象 2.工厂模式创建对象 3.构造函数模式创建对象 4.原型模式创建对象 1.使用Object或对象字面量创建对象 JS中最基本创建对象的方式: var student = new Object(); student.name = "easy"; student.age = "20"; 这样,一个student对象就创建完毕,拥有2个属性name以及age,

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

最近学了 JS 的面向对象,这篇文章主要是探讨 JS 的面向对象中继承的那些事. JS中继承的特点: 1.子类继承父类: 2.子类可以用父类的方法和属性 3.子类的改变可以不影响父类 下面用一个例子来说明 JS 的继承 这段代码创建了一个父类以及它的原型,同时还创建了一个子类,并继承了父类的私有属性 1 <script> 2 //这是父类 3 function Father(name,age,marry){ 4 this.name=name; 5 this.age=age; 6 this.ma

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

昨天在看Prototype看到JS支持面向对象,被前辈问到说那什么是面向对象?JS是面向对象语言吗? 便开始了一连串艰辛爬文过程,今天就来看一下两者有什么差异吧(rgwyjc)! 首先面向对象有三大特色,封装.继承及多态,这三个都是抽象的概念. 其中继承这个抽象的概念,是为了避免多个类别间重复定义了相同行为与实作.基本上有两种实作的方式可以实现,「原型继承」与「类别继承」. 这两者分别的特色如下. 类别继承classical inheritance: 可以从同一个类别(class)中实例多个物件

真的了解JS的面向对象吗?

js的几种数据类型:number, string, boolean, object, undefined五种数据类型 js的常见内置对象类:Date, Array, Math,Number,Boolean, String, RegExp,Function,Object. js的两个类型判断方法:typeof.instanceof typeof:一元运算符,eg: typeof(1)将返回number.它返回的是顶级的几种数据类型 instanceof:二元运算符 eg: myObj instan

一个不成熟的编程员,写写 js 的面向对象

其实感觉本人 js 并未入门,甚至说也是个不合格的编程员,什么面向对象都不会,一直都往 Object 里面填方法,假装很对象的样子. 但学习嘛,这道坎还是得多试几下的,说不定就跨过去了呢. 个人喜欢用的两种构造对象的方法是这样的: function createPerson(name, age) { var o = new Object(); o.name = name; o.age = age; o.getName = function () { return this.name; } ret

js之面向对象

本文的面向对象分为ES6和ES6之前的,重点学习ES6的===============================一.面向对象 1.什么是面向对象 a)什么是对象:万物都可以抽象成对象 时间对象 var oDate=new Date();(我们经常var的oDate就是一个时间对象) oDate.getFullYear();(新建的oDate就继承了Date里面的所有方法) 数组 var arr=new Array(); arr.sort(); arr.length; json{ name: