zoukankan      html  css  js  c++  java
  • 关于javascript面向对象特性的读书笔记

    学习javascript的类面向对象特性;
    1、对象直接量,其实就是直接定义一个多个值对的组合,例如:
    var homer = {
      name: "Homer Simpson",
      age: 34,
      married: true,
      email: "homer@163.com"
      }
    2、对象的属性:可以把一个值赋值给对象的一个新属性来创建他,例如:
    var  book = new Object();
    book.title = "Learn c#";
    book.chapter1 = "class and  object";
    book.chapter1.page = 14;
     这里book原来只是一个Object类的对象,没有任何的属性,可是这里通过赋值语句就给他添加了title和chapter1两个属性,那么在接下来的代码中就可以开始使用这些属性了。
    注意,这里还使用了属性的嵌套;
    这个特性应该算是比较神奇的,以前在别的语言中没有见到过;
    3、函数是存储在变量中的值;可以通过把函数赋值给对象的一个属性来定义个方法,比如:
    // define a class  Rectangle
    function Rectangle(w,h)
    {
     this.Width = w;
     this.Height = h;
    }
    //define a function
    function compute_area()
    {
     return this.Width * this.Height;
    }
    //create a object
    var page = new Rectangle(10,20);
    //将函数赋值给对象的一个变量
    page.area = compute_area;
    //call the function through area;
    var area = page.area();
    当然了,下面这样的定义会更加合理一些:

    function Rectangle_resize(w,h){this.Height=h; this.Width =w;}
    function Rectangle_enlarge(){ this.Height = this.Height*2; this.Width = this.Width*2}
    function Rectangle(w,h)
    {
     this.Width = w;
     this.Height = h;
     this.resize =  Rectangle_resize;
     this.enlarge = Rectangle_enlarge;
    }
    4、原型对象(Prototype)
    使用了远行对象之后,javascript在表达方面才真正具有了面向对象的感觉;
    由于原型对象的属性被类的所有对象共享,所有他通常只用来定义类中所有对象的相同的属性。这使得原型对象适用于定义方法和一些常量;(p144)
    javascript采用的是以原型对象为基础的继承机制,而不是以类为基础的继承机制;所以在我们理解来看,他并不是真正的面向对象语言;
    在javascript并没有真正的类的概念,但是他通过构造函数和原型对象模拟了类;所以我们可以用他来模拟面向对象;
    下面给出一个原型对象的例子:
    //定义了一个构造函数
    function Circle(r)
    {
     this.R =r;
    }
    //定义了一个类属性
    Circle.PI=3.14159;
    //定义了一个类方法
    Circle.max= function(a,b)
    {
     if (a.R>b.R)
      return a
     else
      return b
    }
    //定义了一个对象方法Area
    Circle.prototype=
    {
     Area:function(){
      return Circle.PI* this.R*this.R;
     } 
    }
    //使用该类
    var a = new Circle(10);
    var b = new Circle(20);
    alert(a.Area());
    var c = Circle.max(a,b);
    alert(c.R);
    5、类的层次
    一般来说,javascript中的类都是Object的直接子类,这是javascript所特有的。因为一般来说不需要太复杂的类层次体系;
    但是有的时候我们可能还是会需要一些基层。
    由于javascript的继承体系是基于prototype的,所以我们要从prototype入手,假如我们要为上面的Circle添加一个子类,那么只要让AnotherCircle的prototype对象是Circle类的一个实例就可以了:
    function AnotherCircle(r)
    {
     this.R = r;
    }
    AnotherCircle.prototype = new Circle(0);
    AnotherCircle.prototype.constructor = AnotherCircle;
    6、用数组的方式来访文对象的属性
    例如对于上面的Circle类:
    var c = new Circle(1);
    alert(c["R"]);
    如果使用一个对象是采取的是这种形式,我们常常称之为关联数组;

  • 相关阅读:
    Vue项目中svg图标不能正常显示
    Django Rest Framework
    Django contenttype
    Django CKEdirtor配置(图片上传,粘贴,文件上传)
    [SDOI2017] 数字表格
    [SDOI2015] 约数个数和
    [BZOJ4407] 于神之怒加强版
    [SRM625 Div1 Hard] Seatfriends
    [SRM613~] TaroCheckers
    [玲珑杯1138] 震惊,99%的中国人都会算错的问题
  • 原文地址:https://www.cnblogs.com/strinkbug/p/598477.html
Copyright © 2011-2022 走看看