zoukankan      html  css  js  c++  java
  • 新手如何理解JS面向对象开发?

    如今前端开发已经越来越火了,对于前端开发的要求也是越来越高了,在面试中,经常有面试官会问:你对JS面向对象熟悉吗?

    其实,也就是相当于在问你,在工作中有没有用过面向对象开发?说到这里,有人就问了,什么事面向对象?

    面向对象: 用我个人最简单的理解表达就是,Object的操作。另外一种理解: 给你一个条件,你去找个对象帮我处理这个事情,你就不要自己动手了。

    说白了,我们就是在操作对象,那么我们就需要去创建这个对象,创建对象的方法有很多种,这里就不一一列举了,但是我们要知道,操作的所有的对象都是Object的实例,甚至还可以从原型去生成实例对象。

    工作例子:

    var obj = {};   

    obj.token = '';

    obj.username = '';

    obj.userid = '';

    这样,一个对象搞定了。如果我们要写很多个呢?比如很多地方都用到了,是不是重复要写很多次?MMP,头都大了。

    有没有办法解决呢?

    那么有人就问了,为什么不做一个简单的封装呢?比如:

    function obj (token,username,userid) {

      return {

        token: token,

        username: username,

        userid: userid

      }

    }

    然后需要的时候,调用这个obj方法传参就OK了呀?

    那么问题来了,封装是没错,也能用,也有道理,那么请问,你这不是在调用函数吗?用一次调一次,他们之间有关系吗?

    这时候就问了,那怎么办?有,其实也就说,有没有办法让不同的实例都指向同一个方法(函数)让他们产生关系。那么JS就给出了构造函数这个模式用来解决从原型对象去生成实例,使用了this变量,new运算符。

    先不上例子,先说说为什么构造函数能解决这个问题。首先,它也是一个普通的函数,就是因为它用了this变量与new运算符使得它能够从原型对象上去new一个实例,并且JS规定每一实例都要有一个constructor属性,这个属性可厉害了,它的作用就是把每一个实例都指向同一个构造函数。也就是说,不管你生多少个儿子,爸爸就是那个构造函数。

    接着看个例子:

    function obj (token, username, userid) {

        this.token = token;

        this.username = username;

        this.userid = userid;

    }

    var obj1 = new obj('asdfsdf82377888sdfds','john',1);

    var obj2 = new obj('dfvswc89923884928k','Steph',2);

    好了,例子也有了,根据上面的解释,你可以理解为obj1,obj2的爸爸都是obj,也就是都是构造函数obj的实例。

    来个工作中涉及到的案例,比如上面的例子是发送一条数据到后台的,并且在前端需求中明确要求这个信息是要有时间的,也就是说这条信息是什么时候发布的也要现实出来,这时候后端程序员说:“我不处理了,你自己一起送过来吧”。那这时候,怎么处理?来来来,往下看

    function obj (token, username, userid) {

        this.token = token;

        this.username = username;

        this.userid = userid;

        this.tamp: new Date().getTime();

    }

    这样,O了!

    问题来了,在每次生成实例的时候,this.tamp这个属性是不是都要自动生成一次?而每个实例都多出这么一个属性所占有的空间,是不是浪费资源?

    解决办法: 属性prototype

    先来说说概念,构造函数prototype属性,这个属性指向一个对象,而这个对象的所有的属性跟方法,都会被构造函数的实例所继承。

    什么意思呢?也就是说,构造函数的这个属性里的东西都可以被它的实例继承

    举例:obj构造函数定义一个prototype属性,这个属性指到一个对象,我们给这个对象加上一个属性,比如就叫tamp,那么这个属性都会被obj的实例拿到。也就解决了上面的问题。

    最终可以这么写:

    function obj (token, username, userid) {

        this.token = token;

        this.username = username;

        this.userid = userid;

    }

    obj.prototype.tamp = new Date().getTime();

    var message = new obj('sdfasdf434fasf','name',3);

    var final = JSON.parse(JSON.stringify(message));

    final.tamp = message.tamp;

    最后将final对象传给后台搞定!

    原文:https://www.cnblogs.com/zlbrother/p/9248355.html#4010075

  • 相关阅读:
    2019年中国高校计算机大赛
    2019年华北五省(市、自治区)及港澳台大学生计算机应用大赛
    2019年(第12届)中国大学生计算机设计大赛
    2020移动开发竞赛
    2019年华北五省(市、自治区)及港澳台大学生计算机应用大赛
    Android 开发者指南
    Android :HangUp Notification 横幅通知
    HBU E-mobile
    Android Q is Android 10
    Android Studio 3.5(Last updated 7/29/2019)
  • 原文地址:https://www.cnblogs.com/showcase/p/10949206.html
Copyright © 2011-2022 走看看