什么是原型对象?

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

 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() //恰饭

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

通过原型添加的方法,可以完美的解决数据共享问题,从而节省了内存空间...
 

对js原型对象、实例化对象及prototype属性的一些见解的更多相关文章

  1. js 原型 函数和对象的关系

    函数就是对象的一种  instanceof  可以做判断 var fn = function(){}; fn instanceof Object //true Object构造函数的prototype ...

  2. JavaScript OOP(三):prototype原型对象(即构造函数的prototype属性)

    通过构造函数生成的实例化对象,无法共享属性或方法(即每个实例化对象上都有构造函数中的属性和方法):造成了一定的资源浪费 function Obj(name,age){ this.name=name; ...

  3. 学习javaScript必知必会(6)~类、类的定义、prototype 原型、json对象

    一.定义类:使用的是funciton,因为在js中没有定义类的class语句,只有function. ■ 举例: //定义一个Person类(通过类的无参构造函数定义类) function Perso ...

  4. 1--面试总结-js深入理解,对象,原型链,构造函数,执行上下文堆栈,执行上下文,变量对象,活动对象,作用域链,闭包,This

    参考一手资料:http://dmitrysoshnikov.com/ecmascript/javascript-the-core/中文翻译版本:https://zhuanlan.zhihu.com/p ...

  5. JS面向对像编程四—— prototype 对象

    http://blog.csdn.net/fanwenjieok/article/details/54575560 大部分面向对象的编程语言,都是以“类”(class)作为对象体系的语法基础.Java ...

  6. 个人对JS原型链的一些理解(prototype、__proto__)

    前言 在我一开始学习java web的时候,对JS就一直抱着一种只是简单用用的心态,于是并没有一步一步地去学习,当时认为用法与java类似,但是在实际web项目中使用时却比较麻烦,便直接粗略了解后开始 ...

  7. 简单理解javascript中的原型对象,实现对之间共享属性和行为

    javascript中提供了构造函数.可以方便的创建对象. 典型的构造函数例如以下: function Person(name, age) { this.name = name; this.age = ...

  8. JS原型连

    [推荐]关于JS中的constructor与prototype[转] 最初对js中 object.constructor 的认识: 在学习JS的面向对象过程中,一直对constructor与proto ...

  9. JS原型函数相关基础知识

    函数对象和普通对象 //普通对象 var oo1 = {}, oo2 = new Object(), oo3 = []; console.log(typeof oo1 + ',' + typeof o ...

随机推荐

  1. Linux用iso镜像制作本地yum源

    本次使用的软件为RHEL 6.5和VMware Workstation10 挂载iso镜像   (创建挂载目录,再挂载,进入目录查看是否挂载成功) (根据相应情况,镜像文件一般为sr0 我电脑里是第二 ...

  2. web.xml中<welcome-file-list>标签不起作用

    之前也都提到过,web.xml会通过<servlet>和<servlet-mapping>来确定url和指定contoller文件,乃至于jsp页面的联系. 但是有一个< ...

  3. Object-C(自学1)

    ----- 需求索要 自学了下 OBJECt-C  ----- 就基础部分一些 和操作 command + R 运行command +B 只编译.m文件 NSlog() = printfNSLog 是 ...

  4. Ubuntu16.04连接SSH出现 Server responded “Algorithm negotiation failed” 的解决方法

    今天安装了Ubuntu16.04虚拟机,与SSH连接时出现了如下问题 ​ 解决方法如下: (写在前面:请先确保自己已经给Ubuntu安装了SSH服务.安装方法是在root模式下,终端输入命令apt-g ...

  5. HDU-3374-String Problem(最小表示法, KMP)

    链接: https://vjudge.net/problem/HDU-3374 题意: Give you a string with length N, you can generate N stri ...

  6. vue插件开发的两种方法:以通知插件toastr为例

    方法一: 1.写插件: 在 src 文件夹下面建 lib 文件夹用于存放插件,lib 文件夹下再建toastr文件夹,在toastr文件夹下新建 toastr.js 和 toastr.vue两个文件. ...

  7. Java基础重点

    几个比较重要基础的,以后用到概率比较大的合集. 第一个,是获取时间以字符串形式输出的,用到了Date类.simpleDateFormat类的方法.贴图: 第二个是字符串转时间类型的,与上一个相似,不过 ...

  8. vue 手机物理返回键关闭弹框

    1.打开弹窗调用 window.history.pishState() 函数 2.关闭弹框 3.mounted 生命周期 监听popstate 事件 4.beforeDestroy 生命周期 移除po ...

  9. int的最大最小值补码原码转换

    原码 正数的二进制表示即为原码(正数的原码.反码.补码均一致) 补码 负数的补码为符号位不变,其余为取反,然后加1 补码的设计目的 (原因:带符号的数加减失效) 1.使符号位能够参与加减运算 2.将减 ...

  10. Java实验课:命令行参数是什么?

    命令行参数:在命令行中给定的参数就是命令行参数.(即从输入位置角度理解). 命令行的参数 1. 什么是命令行的参数? 如: java Test1 365 156 "China" ( ...