什么是原型对象?

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

 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. ngnix之笔记

    ############################################################################# 我们在使用的时候会遇到很多的恶意IP攻击,这 ...

  2. linux 发送 post 请求

    curl -H "Content-type: application/json" -X POST -d '{"accoId":"IDAP_000000 ...

  3. puppet 3+Unicorn+Nginx安装配置

    puppet 3+Unicorn+Nginx安装配置 2014-08-15 10:58 酒瓶不倒 酒瓶不倒的博客 字号:T | T 一键收藏,随时查看,分享好友! Unicorn 效率要比 Webri ...

  4. 回调函数c++类中实现

    https://blog.csdn.net/mrailence/article/details/52251201 https://blog.csdn.net/qq_14820081/article/d ...

  5. 5天noip训练心得

    day1 100+95+0=195 T1 二分答案,并查集,很像noip2017 day2 T1 T2 缩环,然后数据结构维护求答案,貌似也是原题 T3 树形dp,比赛上没有做出来, day2 90+ ...

  6. python脚本打包成exe可执行文件

    1. 工具pyinstaller (pip install pyinstaller) 2.生成exe (pyinstaller -F -w Capturing_PDFs.py) 参数 -F 生成单个文 ...

  7. Ion-select and ion-option list styling 自定义样式

    https://forum.ionicframework.com/t/ion-select-and-ion-option-list-styling/117028

  8. 实用——pojo (实体类) 常用函数

    1,转义方法 @JsonProperty("n")

  9. linux命令系列

    Linux系统安装node linux安装rz sz命令:yum install lrzsz上传tar包:rz node-v10.15.0-linux-x64.tar.xz将tar包移到上一级目录下: ...

  10. 灰度图像--频域滤波 傅里叶变换之连续信号傅里叶变换(FT)

    学习DIP第20天 转载请标明本文出处:http://blog.csdn.net/tonyshengtan,欢迎大家转载,发现博客被某些论坛转载后,图像无法正常显示,无法正常表达本人观点,对此表示很不 ...