精华内容
下载资源
问答
  • JavaScript面向对象

    2020-06-07 16:55:10
    JavaScript面向对象(oop) – Object Oritented Programming OOP即面向对象程序设计,全称为Object Oriented Programming,是一种计算机编程架构。 面向对象 对代码的一种抽象,对外提供统一调用接口的编程思想。 ...

    JavaScript面向对象(oop)

    – Object Oritented Programming
    OOP即面向对象程序设计,全称为Object Oriented Programming,是一种计算机编程架构。

    面向对象

    对代码的一种抽象,对外提供统一调用接口的编程思想。

    基于原型的面向对象

    基于原型的面相对象中,对象(object)则是依靠构造器(constructor)利用原型(prototype)构造出来的。

    JavaScript面向对象的名词解释

    属性:事物的特性
    方法:事物的功能
    对象:事物的一个实例
    原型:JavaScript函数中由prototype属性引用了一个对象,即原型对象
    所有的函数都有一个prototype属性。
    人和汽车:
    属性: 人 – 名字、身高、年龄 汽车 – 长、宽、高、颜色

    方法: 人 – 学习、玩耍、唱歌 汽车 – 拉人、载货

    对象:事物的一个实例 — 众多人中一个人
    var obj = new Function(“a”,“b”,“return a+b”);
    var s = obj(2,5);
    alert(s);

    注意如下:

    1. 只要通过new Function() 的对象,都是函数对象
    2. 其余的都是普通对象

    JavaScript 闭包

    JavaScript 变量属于本地或全局作用域。
    全局变量能够通过闭包实现局部(私有)。
    function a(){
    var i= 0;
    function b(){
    alert(++i);
    }
    return b;
    }
    var c = a();
    c();//1 特点:函数b实在a内嵌套的,函数a需要返回函数b
    //用途:1、读取函数内部变量 2、让i变量得值保存在内存中

    function f1(){
    var n = 99;
    nAdd = function (){
    n=n+1;
    }
    function f2(){
    alert(n);
    }
    return f2;
    }
    var rs = f1();
    rs();//99
    nAdd();
    rs();//100 – rs就是f2函数的闭包函数

    闭包优缺点:

    优点:有利于封装,可以访问局部变量的
    缺点:内存占用浪费严重,内存泄漏 – 黑客攻击内存

    对象声明方式:

    js字面式对象声明
    var obj = {
    属性名:属性值
    方法名:funcrtion(){}
    };

    new操作符后跟Object构造函数

    var obj = new Object();
    obj.属性 = 属性值;
    obj.方法 = function(){}
    Object是所有对象的基类,根所有的JavaScript对象都是由object延伸的。

    JavaScript构造方法声明对象

    function test([参数列表]){
    this.属性 = 属性值;
    this.方法 = function(){
    方法的代码;
    }
    }
    var obj = new test(参数列表);

    JavaScript的工厂方式声明对象

    拓展 – 工厂模式
    function createObj(name,age){
    var obj = new Object();
    obj.属性 = 属性值;
    obj.方法 = function(){}
    return obj;
    }
    var box1 = createObj(“liski”,100);
    var box2 = createObj(“wanger”,200);

    JavaScript中原型模式声明对象

    function test(){}
    test.prototype.属性 = 属性值;
    test.prototype.方法 = function(){代码}
    var obj = new test();
    好处:让所有的实例化的对象都拥有它包含的属性及方法

    **JavaScript混合模式声明对象

    混合模式:构造模式+原型模式**
    function test(v1,v2,v3){
    this.v1 = v1;
    this.v2 = v2
    this.v3 = v3
    }
    test.prototypt.方法 = function(){代码}
    var obj = new test();

    遍历对象及存储

    //新建对象 – ren
    for(var i in ren){
    //对象有的是可以当做数组处理的
    alert(i);//弹出的是属性和方法名字
    alert(ren[i]);//弹出的是属性和方法的内容
    }

    对象在内存中的分布(存储)

    在这里插入图片描述

    封装

    封装:把对象内部的数据和操作细节进行隐藏; private – 接口一般为调用方法
    1、JavaScript中没有专门封装的关键词 可以使用闭包创建这种模式 – 函数内部声明的变量外部是无法访问的
    2、能否被访问 取决于:公有和私有内容区别 – 能否在对象外部被访问
    1、这种模式有点消耗内存,一直return 创建对象;
    2、其实封装的本意就是局部的属性隐藏起来;

    继承

    **继承:
    1、原型:是利用prototype添加属性和方法
    2、原型链:proto(对象的内置属性) – 用于指向创建他的函数对象的原型对象prototype
    在这里插入图片描述
    在这里插入图片描述

    构造继承

    1、在子类的内部构造父类的对象实现继承
    在这里插入图片描述

    call和apply的用法

    对象内置方法中的apply和call都会用于继承,区别在于传参方式不同;
    1、call:调用一个对象的一个方法,以另一个对象替换当前对象
    2、Apply:应用某一个对象的一个方法,以另一个对象替换当前对象
    在这里插入图片描述
    在这里插入图片描述

    JavaScript多继承方式如下,拓展了解:

    在这里插入图片描述
    JavaScript面向对象的关键词
    关键词:
    Instanceof delete call apply arguments callee this

    对象冒充

    将父类的属性和方法一起传给子类作为特权属性和特权方法

    在这里插入图片描述

    展开全文
  • javascript 面向对象

    2017-06-27 20:30:33
    javascript 面向对象理解对象 万物皆对象,对象就是包含一组变量和函数的集合。 在软件系统中,对象具有唯一的标识符,对象包括属性和方法,属性就是需要记忆的信息,方法就是对象能够提供的服务。在面向对象中,...

    javascript 面向对象

    理解对象

    • 万物皆对象,对象就是包含一组变量和函数的集合。
    • 在软件系统中,对象具有唯一的标识符,对象包括属性和方法,属性就是需要记忆的信息,方法就是对象能够提供的服务。在面向对象中,对象是某一个类的实例。

    基于object对象:

    var person = new Object();
    person.name = 'My Name';
    person.age = 18;
    person.getName = function(){
        return this.name;
    }

    JS 面向对象

    • 会使用对象的方法,不用关注内部细节
    • JavaScript是基于原型(prototype)的面向对象,对象则是依靠 构造器利用 原型(prototype)构造出来的。例如工厂造一辆车,一方面,工人必须参照一张工程图纸,设计规定这辆车应该如何制造。这里的工程图纸就好比是语言中的 类 (class),而车就是按照这个 类(class)制造出来的;另一方面,工人和机器 ( 相当于 构造器) 利用各种零部件如发动机,轮胎,方向盘 ( 相当于 prototype 的各个属性 ) 将汽车构造出来。

    在JavaScript中使用对象很简单,使用new操作符执行Obejct函数就可以构建一个最基本的对象

    var obj = new Object();
    • 我们称new 调用的函数为构造函数,构造函数和普通函数区别仅仅在于是否使用了new来调用,它们的返回值也会不同。
    • 所谓“构造函数”,就是专门用来生成“对象”的函数。它提供模板,作为对象的基本结构。一个构造函数,可以生成多个对象,这些对象都有相同的结构
    obj.name = 'Byron';
    obj.printName = function(){
        console.log(obj.name);
    };

    构造函数:

    function People(name){
        this.name = name;
    
        this.printName = function(){
            alert(name);
        };
    }
    • 这是一个函数,也是对象,我们称之为类
    var p1 = new People('张三');
    • p1是People类new出来的对象,我们称之为实例
    • 类就是搬砖的模具,实例就是根据模具印出来的砖块,一个模具可以印出(实例化)多个实例,每个实例都符合类的特征

    JS面向对象的特点

    • 抽象
      抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。比如,我们要设计一个学生成绩管理系统,考察学生这个对象时,我们只关心他的班级、学号、成绩等,而不用去关心他的身高、体重这些信息。抽象包括两个方面,一是过程抽象,二是数据抽象。

    • 封装
      所谓封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。

    • 继承
      所谓继承是指可以让某个类型的对象获得另一个类型的对象的属性的方法。继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。

    • 多态
      所谓多态就是指一个类实例的相同方法在不同情形有不同表现形式。

    构造函数

    使用Object构造函数或对象字面量都可以创建对象,但缺点是创建多个对象时,会产生大量的重复代码,因此下面介绍可解决这个问题的创建对象的方法。

    工厂模式

    function createPerson(name, sex) {
        //原料
        var obj = new Object();
        //加工
        obj.name = name;
        obj.sex = sex;
        obj.getName = function () {
            alert(this.name);
        }
        //出厂
        return obj;//使用return返回生成的对象实例
    }
    var person = createPerson('Jack', '男');

    创建对象交给一个工厂方法来实现,可以传递参数,但主要缺点是无法识别对象类型,因为创建对象都是使用Object的原生构造函数来完成的。

    • 构造函数模式
    function Person(name,age){
        this.name = name;
        this.age = age;
        this.getName = function () {
            alert(this.name);
        }
    }
    var person1 = new Person('Jack', 19);
    
    var person2 = new Person('Liye', 23);

    使用自定义的构造函数(与普通函数一样,只是用它来创建对象),定义对象类型(如:Person)的属性和方法。它与工厂方法区别在于:

    • 没有显式地创建对象;
    • 直接将属性和方法赋值给this对象;
    • 没有return语句;

    此外,要创建Person的实例,必须使用new关键字,以Person函数为构造函数,传递参数完成对象创建;实际创建经过以下4个过程:

    1. 创建一个对象
    2. 将函数的作用域赋给新对象(因此this指向这个新对象,如:person1)
    3. 执行构造函数的代码
    4. 返回该对象

    虽然构造函数方式比较不错,但也存在缺点,那就是在创建对象时,特别针对对象的属性指向函数时,会重复的创建函数实例,以上述代码为基础,可以改写为:

    function Person(name,age){
        this.name = name;
        this.age = age;
        this.getName = new Function () {//改写后效果与原代码相同,不过是为了方便理解
            alert(this.name);
        }
    }

    上述代码,创建多个实例时,会重复调用new Function();创建多个函数实例,这些函数实例还不是一个作用域中,当然这一般不会有错,但这会造成内存浪费。

    • 原型模式

    JS每个函数都有一个prototype(原型)属性,这个属性是一个指针,指向一个对象,它是所有通过new操作符使用函数创建的实例的原型对象。原型对象最大特点是,所有对象实例共享它所包含的属性和方法,也就是说,所有在原型对象中创建的属性或方法都直接被所有对象实例共享。

    function Person(){
    }
    Person.prototype.name = 'Jack';//使用原型来添加属性
    Person.prototype.age = 29;
    Person.prototype.getName = function(){
        return this.name;
    }
    var person1 = new Person();
    alert(person1.getName());//Jack
    var person2 = new Person();
    alert(person1.getName === person2.getName);//true;共享一个原型对象的方法

    原型模式的缺点,它省略了为构造函数传递初始化参数,这在一定程序带来不便;另外,最主要是当对象的属性是引用类型时,它的值是不变的,总是引用同一个外部对象,所有实例对该对象的操作都会其它实例:

    • 组合构造函数及原型模式

    目前最为常用的定义类型方式,是组合构造函数模式与原型模式。构造函数模式用于定义实例的属性,而原型模式用于定义方法和共享的属性。结果,每个实例都会有自己的一份实例属性的副本,但同时又共享着对方方法的引用,最大限度的节约内存。此外,组合模式还支持向构造函数传递参数,可谓是集两家之所长。

    function CreatePerson(name, qq){//构造函数
        this.name=name;
        this.qq=qq;
    }
    CreatePerson.prototype.showName=function (){ //原型
        alert('我的名字叫:'+this.name);
    };
    CreatePerson.prototype.showQQ=function (){
        alert('我的QQ号:'+this.qq);
    };
    var obj1=new CreatePerson('blue', '258248832');
    var obj2=new CreatePerson('张三', '45648979879');
    alert(obj1.showName==obj2.showName);
    展开全文
  • javascript面向对象

    2014-11-12 20:58:00
    javascript面向对象 原文:javascript面向对象在JavaScript 中引用类型是一种数据结构,将数据和功能组织在一起。它也常被称做为类,但JavaScript 中却没有类的概念。虽然JavaScript 是一门面向对象的...
    原文:javascript面向对象

    在JavaScript 中引用类型是一种数据结构,将数据和功能组织在一起。它也常被称做为类,但JavaScript 中却没有类的概念。虽然JavaScript 是一门面向对象的语言,却不具备传统面向对象语言所支持的类和接口等基本结构。

     

    如何创建一个数组,在script中创建数组有三种方式:

    1.new运算符

    var  user = new objcet();
    
    user.name = "张三";
    
    user.age=20;
    
    user.sex="男';

    2.对象字面量

    var user ={
          name = "张三",
          age = 20,
          sex = "男"
    }
    注意:使用字面量创建对象的时候,以","结束,但是最后一个属性后不加逗号.

    3.传统复杂方式

    var user = {};
    user.name = "张三";
    user.age = 20;
    user.sex = "男";

    对象的调用方式

    对象的调用方式有两种:

    方法1:

    alert(user.name + " " +user.age);
    
    //返回 '张三 20'

    方法2:

    alert(user['name'] + " " +user['age']);
    
    //返回 '张三 20'

    添加方法

    var user = {
          name:"张三",
          age:20,
          sex:"男",
          info:function(){
            alert(this.name+"        "+this.age+"      "+this.sex);
          },
          showHello:showHello//将对象外部的方法添加到对象
    }
        function showHello(){
            alert("Hello!");    
        }
     
       user.info();         //两种调用方法
       user.showHello();

     

    posted on 2014-11-12 20:58 NET未来之路 阅读(...) 评论(...) 编辑 收藏

    转载于:https://www.cnblogs.com/lonelyxmas/p/4093467.html

    展开全文
  • JAVASCRIPT面向对象

    2016-12-31 15:03:20
    由于内容较多,就不得不分几个章节来讲述一下JAVASCRIPT面向对象 第一章:基础篇 第二章:创建对象 第三章:继承

    由于内容较多,就不得不分几个章节来讲述一下JAVASCRIPT面向对象
    第一章:基础篇
    第二章:创建对象
    第三章:继承

    展开全文
  • Javascript面向对象

    千次阅读 2016-09-14 10:32:11
    在简书上看到了关于Javascript面向对象的一些文章,突然也想写一点自己的见解。 按人们认识客观世界的系统思维方式,采用基于对象(实体)的概念建立模型,模拟客观世界分析、设计、实现软件的办法为什么要面相对象...
  • JavaScript 面向对象

    2020-10-31 12:05:05
    1. 面向过程与面向对象 1.1 面向过程 面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候再一个一个依次调用就可以了。 1.2 面向对象 面向对象是把事务分解成为一个个对象,...
  • Javascript 面向对象

    2018-09-18 20:07:33
    面向对象介绍 什么是对象 Everything is object (万物皆对象) 对象到底是什么,我们可以从两次层次来理解。 (1) 对象是单个事物的抽象。 一本书、一辆汽车、一个人都可以是对象,一个数据库、一张网页、一个与...
  • 上几节讲了 JavaScript 面向对象之命名空间 、 javascript 面向对象JavaScript类 、 JavaScript 面向对象的之私有成员和公开成员 与 Javascript 面向对象之重载,大家可以先看上面的再继续往下看。在JavaScript...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 22,342
精华内容 8,936
关键字:

javascript面向对象

java 订阅