zoukankan      html  css  js  c++  java
  • javascript面向对象的写法01

    类和对象

    其他面向对象的语言类的语法是内置的,自然而然的事。javascript中有对象,但没有类的语法,类的实现需要模拟出来。
    只需要把对象想成一个容器,里面存放一些属性或方法,把类想象成一个对象的模板,便可以很简单的实现对象和类了。其他语言内置的类可能会有其他特性,但是js这种可以作为最简单的类来看待。
     

    js中内置有对象的概念。下面是对象创建的一些方式。

     
    对象的创建,下面是直接new Object()创建一个js对象,然后再设置属性和方法。
    1 var obj = new Object();
    2 obj.a = 1;
    3 obj.func1 = function(){};
    js对象的属性不需要定义对象的时候写好,而是可以在任意时候设置,这是它的特点。
    这种方式管理不方便,并且不可重用。

    另外有两种创建对象的方式

    1 var obj = {};
    2 function ClassA() {
    3 }

    第一种是js的字典,字典本身也是一个js对象。因为动态语言的特性它可以存放各种类型的数据,包括函数指针

    1 var obj = {
    2     "attr1": 1,
    3     "attr2": [],
    4     "fun1": function(a, b) {
    5         return a + b;
    6     }
    7 };
     
    js字典取值的语法可以obj['attr1']或者obj.attr1
    设值 obj["attr1"] = 1; obj.attr1 = 2;
    所以使用的时候便可以
    1 var a = obj.attr1;
    2 var b = obj.fun1(1, 6);
    3 obj.attr1 = 9;
    4 var c = obj.attr1;

    这样字典对象本身的使用语法跟其他语言类也是相似的。它可以看作一个简单的对象使用。它与第一种方式差不多,是第一种的替代方案。

    function的作用

    如果要实现复杂类和对象的特性,需要用到function
    首先函数本身也是个对象,它有js对象的特性,所以可以给函数设置属性等。并且它可以看成是一个对象的构造函数,并且通过js的特性函数可以模拟成一个类来使用。(它是对象,也是函数,也是对象的构造函数,也可以模拟成类)
     
    它本身就是个普通的函数,跟其它语言函数一样
     
    function func1(a, b) {
        return a + b;
    }
    func1(1, 2);
    它自己也是个对象,可以设置属性等
    function A() {
    }
    A.a = 100;
    alert(A.a);
    它可以做对象的构造器, 使用new关键字
    function A() {
    }
    var obj = new A();
    obj.attr = 100;

    它可是被看成是对象的构造函数

    function A(a, b) {
        this.a = a;
        this.b = b;
    }
    var obj = new A();
    obj.a;

    this指向的是当前对象的引用,这个和其他语言类似。上例代码相当于

    function A() {
    }
    var obj = new A();
    obj.a = a;
    obj.b = b;

    (注:这个简单的转换对后续的内容的理解有所帮助

     
    正是因为它有构造对象的能力,并且可以看出是对象的构造函数,所以说它有作为对象模板的功能。一个能定义对象的模板就可以被看成是类了。
    下面的一个function可以看成一个类
    1 function ClassA() {
    2     this.a = 1;
    3     this.b = [];
    4     this.func1 = function() {
    5         return this.a + 100;
    6     };
    7 }

    使用的时候使用new关键字,new出一个对象来

    1 var objA = new ClassA();
    2 var a = objA.a;
    3 var b = objA.func1();
    4 objA.a = 200;

    上面定义类的方式可以看成如下

    1 function ClassA() {
    2 }
    3 
    4 //js是动态语言,js对象的属性不需要定义对象的时候写好,而是可以在任意时候设置,这是动态语言的特点。
    5 var objA = new ClassA();
    6 objA.a = 1;
    7 objA.b = [];
    8 objA.func1 = function(){return this.a + 100};

     

    字典方式也叫对象字面量,它只能直接创建一个对象出来,没有类的功能。直接需要一个对象的时候可以用这个办法创建。
    用function方式能模拟类的功能,并且将属性方法等设置定义在类定义的区域中,一是代码方便管理,二阅读起来也更方便,并且跟其他面向对象语言定义类的写法更相似。
  • 相关阅读:
    《精通情绪》读书笔记
    绩效评估与绩效反馈
    数据分析报告格式zz
    学会谈判zz
    javascript中的双向绑定
    理解 DocumentFragment
    理解Object.defineProperty()
    Vue 改变数组中对象的属性不重新渲染View的解决方案
    ES6中Object.assign() 方法
    控制input输入框光标的位置
  • 原文地址:https://www.cnblogs.com/laozhbook/p/jsoop01.html
Copyright © 2011-2022 走看看