美文网首页
JavaScript进阶知识点--JS面向对象

JavaScript进阶知识点--JS面向对象

作者: 梦幽辰 | 来源:发表于2019-12-23 13:49 被阅读0次

面向对象

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

基于原型的面向对象

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

JS面向对象的名词解释

  • 属性:事物的特效

  • 方法:事物的功能

  • 对象:事物的一个实例

  • 原型:JS函数中由 prototype 属性引用了一个对象,即原型对象(原型)

JS中的闭包

闭包是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数)

用途

  1. 读取函数内部变量

  2. 让在函数内部声明的变量的值保留在内存中

闭包的优缺点

优点

  1. 有利于封装

  2. 可以访问局部变量

缺点

  1. 内存占用浪费严重

  2. 内存泄漏

分析闭包

  1. 函数嵌套函数,这是闭包的一个结构。

  2. 函数里的子函数被函数外部一直使用,使子函数无法释放,保持其所在作用域,形成一个封闭的作用域,称之为闭包。

对象

创建对象

  1. 字面量(P83)

  2. new 操作符后跟 Object 构造函数(P83)

  3. JS中构造函数方法声明对象

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

JS 设计模式

任何模式下,同种模式中的创造出来的对象都是独立存在的

工厂模式

    function createObject(name, age) {
        var obj = new Object();
        obj.name = name;
        obj.age = age;
        obj.run = function() {
            return this.name + this.age + '运行中...';
        };
        return obj;
    }

    var box1 = createObject('zhangsan', 100);
    var box2 = createObject('lisi', 200);

构造方式

  1. 构造方式不会显示创建对象,将属性赋值给 this ,不需要 return 对象

  2. 工厂模式在方法内部创建 object 对象,返回 object 对象,属性和方法都是赋给 object 对象

原型模式

    function test() {
    }
    test.prototype.属性 = 属性值;
    test.prototype.属性 = 属性值;
    test.prototype.方法名称 = function() {
        执行代码;
    }

    var obj = new test();

原型模式的写法原理

函数本身声明为空内容,利用 prototype 定义一些属性及方法

好处

让所有实例化的对象都拥有它包含的属性及方法

混合模式

    function test(v1, v2, v3) {
        this.v1 = v1;
        this.v2 = v2;
        tihs.v3 = v3;
    }

    test.prototype.方法名称 = function() {
        执行代码
    }

    var obj = new test(v1, v2, v3);

遍历

    var ren = {};
    ren.name = "zhangsan";
    ren.age = 18;
    ren.demo = function() {
        document.write("aaaa");
    }

    for(var i in ren){
        // alert(i);    //弹出属性和方法名称
        alert(ren[i]);
    }

    // i是所有的属性或方法名称

封装

封装(Encapsulation):把对象内部数据和操作细节进行隐藏

大多数面向对象的语言都支持封装的特性,提供了 private 关键字来隐藏某些属性或方法,用来限制被封装的数据或者内容的访问,只对外提供了一个对象的专门访问的接口

接口一般为调用方法

JavaScript中可以通过闭包实现封装

原型和原型链

原型

是利用 prototype 添加属性和方法

原型链

JS在创建对象(不论是普通对象还是函数对象)的时候,都有一个叫做proto的内置属性,用于指向创建它的函数对象的原型对象 prototype

对象冒充

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

原型属性和原型方法不属于特权属性和特权方法

相关文章

网友评论

      本文标题:JavaScript进阶知识点--JS面向对象

      本文链接:https://www.haomeiwen.com/subject/fwminctx.html