zoukankan      html  css  js  c++  java
  • 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,虽然你很聪明,因为

  • 相关阅读:
    CNN comprehension
    Gradient Descent
    Various Optimization Algorithms For Training Neural Network
    gerrit workflow
    jenkins job配置脚本化
    Jenkins pipeline jobs隐式传参
    make words counter for image with the help of paddlehub model
    make words counter for image with the help of paddlehub model
    git push and gerrit code review
    image similarity
  • 原文地址:https://www.cnblogs.com/sntetwt/p/2368780.html
Copyright © 2011-2022 走看看