• js prototype 理解


    简单理解: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>


  • 相关阅读:
    redis的初认识
    Java中自己定义缓存方式
    Ehcache整合spring
    巴菲特
    EHcache经典配置
    (1)-使用json所要用到的jar包下载
    java和json互转
    TypeToken 是google提供的一个解析Json数据的类库中一个类
    深刻理解Java编程的7个例子
    Java实现几种常见排序方法
  • 原文地址:https://www.cnblogs.com/signheart/p/f6d5f39b68ad10cda42c9344b245cc33.html
Copyright © 2020-2023  润新知