简单理解:prototype对象是实现面向对象的一个重要机制。每个函数也是一个对象,它们对应的类就是

function,每个函数对象都具有一个子对象prototype。Prototype 表示了该函数的原型,

prototype表示了一个类的属性的集合。当通过new来生成一个类的对象时,prototype对象的属

性就会成为实例化对象的属性。 (类似反射出来的一样)

ps.(在JS 里面 全都是对象,  类Function是function的顶级超类,function实例化了叫对象,在function未实例定义的时候,其实这个定义也是属于Function)

  1. <script>
  2. /*
  3. * 关于prototype,理解这个很有必要
  4. * 可以在类型上使用proptotype来为类型添加行为。这些行为只能在类型的实例上体现。
  5. * JS中允许的类型有Array, Boolean, Date, Enumerator, Error, Function, Number, Object, RegExp, String
  6. * 以后这样分,没有实例化的类称为类型,实例化的类称为对象实例简称实例
  7. */
  8. Object.prototype.name = "zhangsan";
  9. Object.prototype.nihao = function(){
  10. alert("i can method name is "+this.name);
  11. }
  12. var obj = new Object();
  13. obj.nihao();
  14. alert(obj.name);
  15. //在实例上不能使用prototype,否则会发生编译错误
  16. obj.prototype.sex = "男";//error,无法给一个实例prototype
  17. var o = {
  18. name:"zhangsan"
  19. }
  20. o.prototype.age = 30;//error,无法给一个实例prototype
  21. //可以为类型定义“静态”的属性和方法,直接在类型上调用即可
  22. alert(Object.name);
  23. Object.nihao();
  24. //实例不能调用类型的静态属性或方法,否则发生对象未定义的错误。
  25. Object.class = "三年二班";//类静态属性
  26. var ob = new Object();
  27. alert(ob.class); //error 实例不能调用类型的静态属性和方法
  28. //可以在外部使用prototype为自定义的类型添加属性和方法。
  29. function Mytest(){
  30. this.name = "zhangsan";
  31. this.age = 20;
  32. }
  33. Mytest.prototype.hello = function(){
  34. alert(this.name);
  35. }
  36. var m = new Mytest();
  37. m.hello();
  38. //在外部不能通过prototype改变自定义类型的属性或方法。
  39. //该例子可以看到:调用的属性和方法仍是最初定义的结果。
  40. Mytest.prototype.name = "lisi";
  41. var mm = new Mytest();
  42. alert(mm.name);
  43. //可以在对象实例上改变或增加属性。(这个是肯定的)
  44. //也可以在对象上改变或增加方法。(和普遍的面向对象的概念不同)
  45. mm.name2 = "lisi";
  46. mm.hello = function(){
  47. alert(this.name2);
  48. }
  49. //mm.hello();
  50. //继承,这个例子说明了一个类型如何从另一个类型继承。
  51. function Mytest2(){}
  52. Mytest2.prototype = new Mytest;
  53. var m2 = new Mytest2();
  54. alert(m2.name);
  55. //这个例子说明了子类如何重写父类的属性或方法。
  56. Mytest2.prototype.name = "wangwu";
  57. Mytest2.prototype.hello = function(){
  58. alert('i can mytest2 extend Mytest save method hello');
  59. }
  60. var m3 = new Mytest2();
  61. m3.hello();
  62. //子类中的name属性值不会被父类覆盖
  63. function Mytest3(){
  64. this.name = "子类中的name属性值不会被父类覆盖";
  65. this.age = 20;
  66. }
  67. Mytest3.prototype = new Mytest();
  68. var m4 = new Mytest3();
  69. alert(m4.name);
  70. </script>


js prototype 理解的更多相关文章

  1. js面向对象理解

    js面向对象理解 ECMAScript 有两种开发模式:1.函数式(过程化),2.面向对象(OOP).面向对象的语言有一个标志,那就是类的概念,而通过类可以创建任意多个具有相同属性和方法的对象.但是, ...

  2. JS之理解继承

    JS之理解继承:https://segmentfault.com/a/1190000010468293 1.call继承,也叫借用构造函数.伪造对象或是经典继承.call继承回把父类的私有属性和方法继 ...

  3. vue自定义指令(Directive中的clickoutside.js)的理解

    阅读目录 vue自定义指令clickoutside.js的理解 回到顶部 vue自定义指令clickoutside.js的理解 vue自定义指令请看如下博客: vue自定义指令 一般在需要 DOM 操 ...

  4. 深入理解js——prototype原型

    之前(深入理解js--一切皆是对象)中说道,函数也是一种对象.它也是属性的集合,你也可以对函数进行自定义属性.而JavaScript默认的给了函数一个属性--prototype(原型).每个函数都有一 ...

  5. js的prototype理解

    转载:https://www.cnblogs.com/douyage/p/8630529.html 在典型的面向对象的语言中,如java,都存在类(class)的概念,类就是对象的模板,对象就是类的实 ...

  6. 对JS prototype的理解

    1.什么是prototype? function F() {} f1 = new F();f2 = new F(); 以上的代码,F()是一个构造函数,f1和f2是由这个构造函数产生的对象. prot ...

  7. js笔记——理解js中的call及apply

    call及apply在js里经常碰得到,但一直感觉很陌生,不能熟练使用.怎样才能熟练应用呢? 为什么存在call和apply? 在javascript OOP中,我们经常会这样定义: function ...

  8. js prototype

    1 原型法设计模式 在.Net中可以使用clone()来实现原型法 原型法的主要思想是,现在有1个类A,我想要创建一个类B,这个类是以A为原型的,并且能进行扩展.我们称B的原型为A. 2 javasc ...

  9. js深入理解"闭包"

    一.变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域. 变量的作用域无非就是两种:全局变量和局部变量. Javascript语言的特殊之处,就在于函数内部可以直接读取全局变量 ...

随机推荐

  1. 8个使用JavaScript展示图片解决方案

    1. JonDesign’s SmoothGallery 2.0 SmoothGallery demo 2. (E)2 Photo Gallery (E)2 Photo Gallery demo 3. ...

  2. 【pyhon】nvshens按目录图片批量下载爬虫1.00(多线程版)

    # nvshens按目录图片批量下载爬虫1.00(多线程版) from bs4 import BeautifulSoup import requests import datetime import ...

  3. 本周推荐7款CSS3实现的动态特效

    大家都知道,在网页制作时使用CSS技术,可以有效地对页面的布局.字体.颜色.背景和其它效果实现更加精确的控制.只要对相应的代码做一些简单的修改,就可以改变同一页面的不同部分,或者页数不同的网页的外观和 ...

  4. RSA 在C#里简单实现

    1.选择两个大素数:p,q;2.计算所得n:n=p*q;3.计算中间结果t:t=(p-1)*(q-1);4.选择一个e:要求e和t的最大公因数是1(也就是e与t互素);5.计算所得d:d*e mod ...

  5. Event sender

    Sometimes it is convenient to know which widget is the sender of a signal. For this, PyQt4 has these ...

  6. Unity3D入门工具介绍(一)

    1.UnitySetup-4.1.2.exe安装包 2unity.pro.4.1.2.patch-MPT.exeUnity3D破解补丁  关于Unity3d 可以看下这个 http://book.2c ...

  7. WPF显示经常使用的几个显示文字控件TextBox, TextBlock, Lable

    TextBox, TextBlock. Lable 当中TextBox 和Lable均继承了Control类 能够对其进行模板编辑. 而TextBlock没有继承Control所以不能对其进行模板编辑 ...

  8. Spring 基于Aspectj切面表达式

    package com.proc; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.ProceedingJoinPoint; im ...

  9. Android 弹幕效果开发案例

    概述 现在有个很流行的效果就是弹幕效果,满屏幕的文字从右到左飘来飘去.看的眼花缭乱,看起来还蛮cool的 现在就是来实现这一的一个效果,大部分的都是从右向左移动漂移,本文的效果中也支持从左向右的漂移移 ...

  10. 【php写日志】php将日志写入文件

    php 写内容到文件,把日志写到log文件 <?php header("Content-type: text/html; charset=utf-8"); /******** ...