js原型详解

1.内存模型:

1.原型是js中非常特殊一个对象,当一个函数(Person)创建之后,会随之就产生一个原型对象

2. 当通过这个函数的构造函数创建了一个具体的对象(p1)之后,在这个具体的对象中就会有一个属性指向原型

2.演示

以下演示了通过原型的创建方式,使用基于原型的创建可以将属性和方法
  设置为Person专有的,不能再通过window来调用,如此就完成了封装

 <script type="text/javascript">
function Person(){ } Person.prototype.name = "gui"; Person.prototype.age = 20; Person.prototype.say = function(){ alert(this.name+","+this.age); } var p1 = new Person(); p1.say();//gui,20 p1.name="gui22"; p1.say();//gui22,20
     //通过window没有办法调用say方法
say();

        var p2 = new Person();

        p2.say();//gui,20

</script>

【注】p1有自己的内存空间p1.name="gui22";只是改变了自己内存空间的name,并未触及原型中的name

3.下面是一些判断函数有助于理解原型图

//检测某个对象是否指向该函数的原型

// alert(Person.prototype.isPrototypeOf(p1));//true

//检测某个对象的constructor

//  alert(p1.constructor == Person);//true

//检测某个对象是否是自己的属性
        //alert(p1.hasOwnProperty("name"));//true,p1在自己的空间中设置了name属性
        //alert(p2.hasOwnProperty("name"));//false

//删除某个对象的某个属性
      //  delete p1.name;
       //  alert(p1.hasOwnProperty("name"));//false,由于已经删除了

//检测某个对象在原型或者自己中是否包含有某个属性,通过in检测

//alert("name" in p1);

//alert("name" in p2);

//alert("gender" in p1);//gender(性别),在原型和自己的空间中都没有,false

浅谈JavaScript原型图与内存模型的更多相关文章

  1. 浅谈JavaScript原型对象与相关设计模式

    引言 本文先从介绍JavaScript中基本的几种设计模式开始,最后引出原型对象,然后对原型对象有一个较全面的介绍. 1.创建对象的几种设计模式 A.工厂模式 我们知道在JavaScript中创建对象 ...

  2. 浅谈JavaScript原型

    在JavaScript中,所有函数都会拥有一个叫做prototype的属性,默认初始值为“空”对象(没有自身属性的对象). 1.原型属性 如下所示,简单地定义一个函数: function foo(a, ...

  3. 浅谈JavaScript原型与原型链

    对于很多前端开发者而言,JavaScript的原型实在是很让人头疼,所以我这边就整理了一下自己对应原型的一点理解,分享给大家,供交流使用 原型 说起原型,那就不得不说prototype.__proto ...

  4. 浅谈javascript的原型及原型链

    浅谈javascript的原型及原型链 这里,我们列出原型的几个概念,如下: prototype属性 [[prototype]] __proto__ prototype属性 只要创建了一个函数,就会为 ...

  5. 浅谈JavaScript中的闭包

    浅谈JavaScript中的闭包 在JavaScript中,闭包是指这样一个函数:它有权访问另一个函数作用域中的变量. 创建一个闭包的常用的方式:在一个函数内部创建另一个函数. 比如: functio ...

  6. 浅谈JavaScript浮点数及其运算

    原文:浅谈JavaScript浮点数及其运算     JavaScript 只有一种数字类型 Number,而且在Javascript中所有的数字都是以IEEE-754标准格式表示的.浮点数的精度问题 ...

  7. 浅谈javascript函数节流

    浅谈javascript函数节流 什么是函数节流? 函数节流简单的来说就是不想让该函数在很短的时间内连续被调用,比如我们最常见的是窗口缩放的时候,经常会执行一些其他的操作函数,比如发一个ajax请求等 ...

  8. 浅谈Android应用性能之内存

    本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处! 文/ jaunty [博主导读]在Android开发中,不免会遇到许多OOM现象,一方面可能是由于开 ...

  9. 浅谈 JavaScript 编程语言的编码规范

    对于熟悉 C/C++ 或 Java 语言的工程师来说,JavaScript 显得灵活,简单易懂,对代码的格式的要求也相对松散.很容易学习,并运用到自己的代码中.也正因为这样,JavaScript 的编 ...

随机推荐

  1. Oracle 的trim,ltrim,rtrim函数的区别

    该函数共有两种作用:第一种,即大家都比较熟悉的去除空格.例子:--TRIM去除指定字符的前后空格SQL> SELECT TRIM(' dd df ') FROM dual;TRIM('DDDF' ...

  2. POJ 3130 How I Mathematician Wonder What You Are! (半平面相交)

    Description After counting so many stars in the sky in his childhood, Isaac, now an astronomer and a ...

  3. hdu1166:敌兵布阵(树状数组或线段树)

    题目描述: 一堆废话不用看...... 输入: 第一行一个整数T,表示有T组数据.每组数据第一行一个正整数N(N<=50000),表示敌人有N个工兵营地,接下来有N个正整数,第i个正整数ai代表 ...

  4. 早日选择一门自己喜欢的,然后瞄准目标,不达目的誓不罢休。像文章的作者一样成为一名成功的IT人士。

    hawk的奋斗历程. 来自:LinuxForum  :http://www3.linuxforum.net/ 原址:http://www.linuxforum.net/forum/gshowflat. ...

  5. LG2704 [NOI2001] 炮兵阵地

    题目描述 (试题来源:Link ) 司令部的将军们打算在 \(N\times M\) 的网格地图上部署他们的炮兵部队.一个 \(N\times M\) 的地图由 \(N\) 行 \(M\) 列组成,地 ...

  6. JS当中的无限分类递归树

    列表转换成树形结构方法定义: //javascript 树形结构 function toTree(data) { // 删除 所有 children,以防止多次调用 data.forEach(func ...

  7. Oracle 11g 的卸载

    Oracle 11g 的卸载 停止 oracle 相关的所有服务. 使用 Oracle 自带的 Universal Installer 卸载工具卸载 Oracle. 删除注册表 HKEY/LOCAL_ ...

  8. SQL语言基础-基本概念

    SQL:IBM的圣约瑟(SanJose),SEQUEL 2(也就是现在的SQL语言) 1979.Oracle首先提出提供了商用的SQL语言 1986.10美国ANSI采用SQL作为关系数据库管理系统的 ...

  9. vue 项目配置sass

    1.运行npm install node-sass --save-dev npm install sass-loader --save-dev 2.打开build文件夹下面的webpack.base. ...

  10. Django-自定义用户模型

    Django最方便的一点,是自带用户系统,但有些情况下,不符合项目需求, 原因1.我们有时候需要自定义一些字段,或者删除Django自带字段,2.我们有时候需要定义哪些字段是必填的,登陆时的用户名是哪 ...