• javascript 构造函数和方法


    在之前javascript 定义函数的方法这篇日志里面有提到构造函数,现在,来具体的介绍以下javascript的构造函数及方法的概念。

    这是两个及其有用的概念,对后面介绍javascript的面向对象机制,及其类方法,继承的顿悟有着说不清,道不明的好处,

    仔细理解一下吧

    构造函数:

    在javascript中,使用new运算符或者预定义的构造函数(如Object(),Date(),Function()等)都可以创建并初始化一个新的js对象。

    构造函数具有如下两个特性,其本质仍然是javascript函数:

    它由new运算符调用

    传递给它的是一个对新创建的空对象的引用,将该引用作为关键字this的值,而且它还要对新创建的对象进行适当的初始化

      //定义构造函数,
      function User(name,age)
      {
         this.name = name;
         this.age    = age;
     }

     //实例化两个对象
     var simaopig = new User('simaopig','25');
     var xiaoxiaozi = new User('xiaoxiaozi','25');

    这里需要明白并且强迫自己接受如下观点:构造函数知识初始化了特定的对象,但是其并不返回这个对象

    在上例中,我们可以看到构造函数对this的引用,其只是初始化由this传递进来的对象,并且啥也不返回。

    方法:

    所谓方法(method),其实就是通过对象调用的javascript函数

    其实函数又是什么?函数与方法又有啥不同?这似乎是一个哲学概念?鸡是什么?那就是蛋啊。。

    函数其实就是数值,其和方法没有任何本质区别,之所以要交两个名字,无非是要强调对象的作用罢了。

    因为你完全可以把函数赋值给任何变量,当然也就包括了对象的属性。

    //实例化对象o
    var o = new Object();

    //把函数fun赋值给o的属性method
    o.method = fun;

    //声明函数fun
    function fun()
    {
    return '250';
    }

    //调用o的属性,效果同学们自己去查看,又是弹窗,值为250

    alert(o.method());

    方法有个非常重要的属性,即在方法主体内部,关键字this的值为调用该方法的对象。

    任何被用作方法的函数都会得到一个额外的实际参数,就是调用该函数方法的对象,也就是刚才我告诉你的this。

    我为啥说函数其实就是方法,方法也就是函数呢?

    函数是储存在变量中的值,而那个变量也不过是全局对象的一个属性,因此,当你调用一个函数是,其实就是在调用全局对象的一个方法。

    但是,函数和方法真正的不同点就在于设计和目的上,方法是用来对this对象进行操作的,而函数通常是独立的并不需要this对象。

    本来写到这里就不想再说啥了,不过,如果不把这个例子抄下来,难免真正需要的人就有些发晕,尤其当看我下一篇日志的时候。。

    所以,抄。

    //定义构造函数 矩形,有俩属性,宽和高

    function Rectangle(w, h)
    {
    this.width = w;

    this.height = h;
    }

    //定义一个方法,计算面积,这里用了this哦

    function compute_area()
    {
    return this.width * this.height;
    }

    //实力化对象rect

    var rect = new Rectangle(3,4);

    //通过给属性赋值把函数 compute_area作为rect对象的一个属性

    rect.area = compute_area;

    //如下内容调用新的方法获得面积 结果为3 * 4

    var are = rect.area();

    上述代码有个问题,就是我每次调用rect对象的方法前,总得将方法赋值给其的一个属性。

    那我新实例化的对象,比如rect2要想求得面积,还得这样来上一遍。麻烦啊。

    那如果我直接在构造函数里面声明呢?为所用实例化的对象都声明一个方法,是不是可以解决问题?

    NO,虽然你很聪明,因为

  • 相关阅读:
    扩展欧几里得(exgcd)与同余详解
    卡常模板
    文艺平衡树(区间翻转)
    Motto
    PKUWC2019划水记
    【模板】Splay(洛谷P3391)
    【PKUSC2018】最大前缀和
    【PKUWC2018】随机算法
    【PKUWC2018】Slay the Spire
    【PKUWC2018】Minimax
  • 原文地址:https://www.cnblogs.com/sntetwt/p/2368780.html
Copyright © 2020-2023  润新知