zoukankan      html  css  js  c++  java
  • JavaScript简单重写构造器的原型

     1 //简单重写原型对象:
     2 
     3 //一个构造函数Person
     4 function Person(){
     5     
     6 }
     7 //重写Person的原型
     8 //把Person的原型赋值给一个新的对象 是我们重写的过程
     9 Person.prototype={
    10     // 对于构造器 如果我们不给他写,则构造器就是Object的构造器了
    11 constructor:Person, //加上构造器属性 这里有一点问题 因为构造器属性是不可枚举的,这里无法设置
    12 name:"张三",
    13     sayName:function(){
    14         alert(this.name);
    15     }
    16 };
    17 
    18 var p1 = new Person();
    19 alert(Person.prototype.constructor);
    20 
    21 /*
    22     以上我们认为模拟重写了一个构造函数的原型
    23     但是有很多问题。构造器是不可枚举的,在这里我们无法实现不可枚举属性。
    24     
    25     在js中提供Object.defineProperty(对象,属性,配置) 来实现设置属性的一些性质
    26     重写一个原型就可以这样实现:
    27 * */
    28 Object.defineProperty(
    29     Person.prototype ,     //要配置的对象
    30 "constructor",    //配置对象的构造器 构造器
    31 {        //构造器的特性
    32     enumerable :false,    //构造器 不可枚举
    33     value : Person    //构造器的值是Person
    34     }
    35 );
    36 // 通过以上方式重写 就把构造器设置成不可枚举了
    37 var p2 = new Person();
    38 for(attr in p2){
    39     alert(attr);
    40 }
    41 
    42 /*
    43     注意:由于语言的动态性
    44     
    45         在实例化对象之后 如果给原型添加属性或方法,实际上实例对象是能调用后添加的属性和方法
    46         实例化之后 重写原型,实际上实例的原型还是指向原来的原型对象 不是新的原型对象
    47 */
    48 function Person(){
    49     
    50 }
    51 var p1 = new Person();
    52 Person.prototype.name="哈哈";
    53 alert(p1.name);    //哈哈  因为p1的原型引用调用之前已经添加属性 可以使用
    54 
    55 var p2 = new Person();
    56 Person.prototype = {
    57     constructor : Person,
    58     name:"xixi"
    59 };
    60 alert(p2.name);    //哈哈,实例对象之后改变构造器的原型,实例的对象的原型还指向原来的
    61 
    62 var p3 = new Person();
    63 alert(p3.name);    //xixi  因为这是在改变构造器原型之后的实例对象
  • 相关阅读:
    Android杂谈错误整理(持续更新)
    javax.servlet.ServletException: java.lang.NoClassDefFoundError: javax/el/ELResolver错误解决办法
    收藏微软面试智力题 (附答案)
    gridview等控件换行实现办法
    [原创]DataView特殊字条串替换(过滤)
    [转]ASP.Net4.0中新增23项功能
    从LOGO看百度与谷歌
    [转]Winxp下kernel32.dll内部的函数集合和地址值
    [转]ASP.NET Web Forms 4.0 简介
    asp.net类似于QQ表情弹出框功能的实现方法
  • 原文地址:https://www.cnblogs.com/Lin-Yi/p/7439987.html
Copyright © 2011-2022 走看看