• 对js原型对象、实例化对象及prototype属性的一些见解


    什么是原型对象?

    请看下面的代码,我们以各种姿势,创建了几个方法!

     function fn1() {
        }
        var fn2 = function () {
        }
        var fn3 = new Function()
    
        console.log(typeof fn1) //function
        console.log(typeof fn2) //function
        console.log(typeof fn3)  //function
    
        console.dir(fn1) //如下图
        console.dir(fn2)//如下图
        console.dir(fn3)//如下图
     
    Snipaste_2019-07-06_20-15-51.png
    得出结论~记住,重点
    function 对象有一个prototype属性,使用new生成的对象就没有这个prototype属性。
    

    (这里什么是proto,什么是原型链,我们放到后面再说,以防干扰思路)

    那么原型对象有什么作用?

    这里我们来复习一下自定义构造函数~

    function Person(name, age) {
            this.name = name
            this.age = age
            this.eat = function () {
                console.log("吃饭")
            }
        }
        var per1 = new Person("小明", 18)
        var per2 = new Person("小红", 20)
       
        console.log(per1 === per2) //false
        per1.eat() //吃饭
        per2.eat() //吃饭
        console.log(per1.eat === per2.eat) //false

    这里我使用自定义构造函数实例化了两个对象,可以看到,这两个对象的eat方法虽然功能相同,不是同一个方法!

    得出结论~~~
    自定义构造函数每次实例化出来的对象,构造函数都会创建一次,
    所以eat方法在内存中创建了两次!他们在内存中的地址不同,所以不等!
    但是因为它们的逻辑和功能一样,这样就导致了代码冗余,影响性能,所以这里就需要用到原型对象!
    

    怎么使用原型及原型的作用

    如下:

      function Person(name, age) {
            this.name = name
            this.age = age
        }
        Person.prototype.eat = function () { //将eat方法添加到Person的原型中
            console.log("恰饭")
        } 
        var per1 = new Person("小明", 18)
        var per2 = new Person("小红", 20)
        console.log(per1 === per2) //false
        console.log(per1.eat === per2.eat) //true
        per1.eat() //恰饭
        per2.eat() //恰饭

    同样的配方,同样的味道,但不同的是:

    通过原型添加的方法,可以完美的解决数据共享问题,从而节省了内存空间...
     
  • 相关阅读:
    C# 关于爬取网站数据遇到csrf-token的分析与解决
    Nginx实现同一端口HTTP跳转HTTPS
    Console也要美颜了,来给Console添色彩
    程序员如何巧用Excel提高工作效率
    LeetCode每日一练(1-3)
    Json对象转Ts类
    JcApiHelper 简单好用的.Net ApiHelper
    .Net Core Mvc/WebApi 返回结果封装
    C#光盘刻录
    Orm框架开发之NewExpression合并问题
  • 原文地址:https://www.cnblogs.com/itgezhu/p/11593403.html
Copyright © 2020-2023  润新知