避免对象重复使用,有时候js中会用到原型

function Person(){

  name="test";

  age=123;

}

var car={

 price=10000;

}

Person.prototype.car=car;

var person=new Person();

console.write(person.car.price);

//上面的代码中所有以后使用构造函数创建出来的新的Person对象访问car的时候都用的是用一个对象,而不像动态给person对象添加属性一样(使用的是不同对象),这样避免了内存开销。

原型使用上的注意点,对象访问属性的时候,首先到自身对象定义上去查找,如果没有查找到相应的属性,则去构造函数的原型上去查找。但如果给属性赋值,则不会去原型上去查找,这就是说,通过实例对象不会将原型属性覆盖。

person.car={};//这不会影响原型,而是动态给person对象添加了一个car属性;

构造函数的原型上有两个属性,contructor及__proto__,前者是构造函数,后者是原型自己;

也就是说Person与contructor相等,这样我们就得出一个结论

var p=new Person();与var p=new person.contructor();是同样的效果;

Person.prototype===p.__proto__;

这是系统默认的,尽量不要修改;

这样就使得我们在为原型赋值的时候最好手动赋值这个属性;

Person.prototype={

  constructor:Person; 

}

使用原型,我们可以对js中的内置对象进行增强(给内置对象添加属性和方法)

var arr=[];

这时候如果想使用原型增强arr对象的方法

Array.prototype.func={};//这种方法不被推荐,因为可能会造成干扰,项目由多个人参加,每个人都在内置的对象上添加属性是不安全的。

function Arr(){

};

Arr.prototype=new Array();

这样Arr对象就有了所有Array的方法及属性,我们可以通过给Arr添加属性和方法来增强内置对象Array;

这种可以说是使用原型的方式来实现继承;

经典的继承方法:Object.create(obj);

创建出来的对象就会自动继承obj;

原型链的基本结构

我们自定义的对象有原型,而这个原型是通过Object创建出来的。Object构造仍然有原型,Object.prototype。而object原型的构造及原型均为null;

Object.prototype中有valueof成员,所以所有的对象在参与运算的时候会尝试调用valueof方法,如果无法获取,则会调用tostring()方法进行字符串拼接;

JavaScript原型(第五天)的更多相关文章

  1. 深入理解javascript原型和闭包(13)-【作用域】和【上下文环境】

    上文简单介绍了作用域,本文把作用域和上下文环境结合起来说一下,会理解的更深一些. 如上图,我们在上文中已经介绍了,除了全局作用域之外,每个函数都会创建自己的作用域,作用域在函数定义时就已经确定了.而不 ...

  2. 深入理解javascript原型和闭包(15)——闭包

    前面提到的上下文环境和作用域的知识,除了了解这些知识之外,还是理解闭包的基础. 至于“闭包”这个词的概念的文字描述,确实不好解释,我看过很多遍,但是现在还是记不住. 但是你只需要知道应用的两种情况即可 ...

  3. 深入理解javascript原型和闭包(18)——补充:上下文环境和作用域的关系

    本系列用了大量的篇幅讲解了上下文环境和作用域,有些人反映这两个是一回儿事.本文就用一个小例子来说明一下,作用域和上下文环境绝对不是一回事儿. 再说明之前,咱们先用简单的语言来概括一下这两个的区别. 0 ...

  4. 《深入理解javascript原型和闭包系列》 知识点整理(转)

    深入理解javascript原型和闭包系列 对原型和闭包等相关知识的讲解,由浅入深,通俗易懂,每个字都值得细细研究. 一.一切都是对象 1. typeof操作符输出6种类型:string boolea ...

  5. 《深入理解javascript原型和闭包系列》 知识点整理

    深入理解javascript原型和闭包系列 对原型和闭包等相关知识的讲解,由浅入深,通俗易懂,每个字都值得细细研究. 一.一切都是对象 1. typeof操作符输出6种类型:string boolea ...

  6. 深入总结Javascript原型及原型链

    本篇文章给大家详细分析了javascript原型及原型链的相关知识点以及用法分享,具有一定的参考价值,对此有需要的朋友可以参考学习下.如有不足之处,欢迎批评指正. 我们创建的每个函数都有一个 prot ...

  7. 浅谈系列之 javascript原型与对象

    在我学习与使用javascript三个月中,我一直对javascript的继承关系以及prototype理解不清,导致很多时候为什么这么用说不出个所以然来.截止到本周为止,通过之前的学习以及自己的再学 ...

  8. JavaScript原型OOP——你上车了吗?

    .title-bar { width: 80%; height: 35px; padding-left: 35px; color: white; line-height: 35px; font-siz ...

  9. 深入理解javascript原型和闭包 (转)

    该教程绕开了javascript的一些基本的语法知识,直接讲解javascript中最难理解的两个部分,也是和其他主流面向对象语言区别最大的两个部分--原型和闭包,当然,肯定少不了原型链和作用域链.帮 ...

随机推荐

  1. tensorflow tfrecord文件存储

    import tensorflow as tf import numpy as np import skimage from skimage import data, io, color from P ...

  2. emacs安装及配置

    目录 平台 安装 基本配置 配置文件结构 elpa仓库管理 主题配色 字体显示配置(解决中文卡顿) 插件配置 markdown 简介 markdown-mode markdown-toc org导出m ...

  3. 1、Python2.7编译安装

    下载Python安装包(下载地址:https://www.python.org/downloads/) 选择Python 2.7.3版本 防止交互式模式下出现方向键乱码问题,需安装相关包 yum in ...

  4. day13笔记

    1:StringBuffer(掌握) (1)用字符串做拼接,比较耗时并且也耗内存,而这种拼接操作又是比较常见的,为了解决这个问题,Java就提供了 一个字符串缓冲区类.StringBuffer供我们使 ...

  5. 实训任务02:Hadoop基础操作

    实训任务02:Hadoop基础操作 班级            学号               姓名 实训1:创建测试文件上传HDFS,并显示内容 需求说明: 在本地计算机上创建测试文件helloH ...

  6. jmeter如何进行MQTT性能测试(测试前期准备二,MQTT插件及协议了解)

    jmeter插件下载地址及使用,已经有大佬总结好了 大佬的博客地址: https://blog.csdn.net/yellowanwu/article/details/50889677 添加线程组:添 ...

  7. 使用spring框架,用xml方式进行bean装配出现“The fully qualified name of the bean's class, except if it serves...”

    使用spring框架,用xml方式进行bean装配出现“The fully qualified name of the bean's class, except if it serves...”. 原 ...

  8. 在执行hadoop fs命令时,出现WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable错误

    错误呈现: 解决过程: (参考链接:https://www.cnblogs.com/kevinq/p/5103653.html) 1.输出hadoop的详细日志,并执行hadoop fs命令来查看错误 ...

  9. String、StringBuffer和StringBuilder的区别及应用场景

    1. 运行速度:StringBulider>StringBuffer>String String为什么运行行慢呢? String:字符串常量 StringBuffer.StringBuli ...

  10. 将前台页面的数据传到后台的方法(不调用ajax,少量数据)

    1.前台画面:在页面中加入form和runat = "server"的方法并加入触发事件 <form method="post" runat=" ...