zoukankan      html  css  js  c++  java
  • 简单原型

    1、简单原型

        function Person() {
        }
        Person.prototype = {
            name : "xiao A",
            age : 26,
            say : function () {
                alert("I am simple prototype function");        
            }
        }
        var p1 = new Person();
        alert(Person.prototype.constructor)     // function Object() { [native code] }
        for(attr in p1){
            alert(attr);        // name   age    say
        }

    上面的方法虽然在创建原型属性的时候比较便捷,但是他改变了 Person.prototype 的 constructor , 因此需要对上面的方法进行改造

    2 、方法一

        function Person() {
        }
        Person.prototype = {
            constructor : Person,
            name : "xiao A",
            age : 26,
            say : function () {
                alert("I am simple prototype function");
            }
        }
        var p1 = new Person();
        alert(Person.prototype.constructor)     // function Person() {  }
        for(attr in p1){
            alert(attr);        //    constructor    name   age    say
        }

    该方法实现了 在使用简单原型时,不改变 原型的构造器 即 Person.prototype 的 constructor ,他的缺点是 constructor 属性变成了 可枚举的属性,所以还需要对其进行改进

    3、 Object.defineProperty()  可以为原型对象重新加入构造器

        function Person() {
        }
        Person.prototype = {
            name : "xiao A",
            age : 26,
            say : function () {
                alert("I am simple prototype function");
            }
        }
    
        Object.defineProperty(Person.prototype,"constructor",{
            enumerable : false,             // 指定属性不可枚举
            value : Person                   // 指定 值
        })
    
        var p1 = new Person();
        alert(Person.prototype.constructor)     // function Person() {  }
        for(attr in p1){
            alert(attr);        //   name   age    say
        }

    4、原型的动态特性

        // 原型的动态特性
        function Person() {
        }
        var p1 = new Person();
        Person.prototype.say = function () {
            alert("我是原型特性")
        }
        p1.say();           //  我是原型特性
       function Person() {
       }
       var p1 = new Person();
        Person.prototype = {
            constructor : Person,
            say : function () {
                alert("我是原型的函数!")
            }
        }
        p1.say();                // p1.say is not a function
       function Person() {
       }
    
        Person.prototype = {
            constructor : Person,
            say : function () {
                alert("我是原型的函数!")
            }
        }
        var p1 = new Person();
        p1.say();                // 我是原型的函数!

    注意 : 简单原型使用的顺序(实例对象必须在原型对象之后创建)

  • 相关阅读:
    A basic Windows service in C++ (CppWindowsService)
    json转换为键值对辅助类
    函数参数复习
    python --------------网络(socket)编程
    计算器
    python------------------异常处理
    hashlib,configparser,logging模块
    面向对象之反射及内置方法
    python之--------封装
    继承进阶
  • 原文地址:https://www.cnblogs.com/debra/p/7801420.html
Copyright © 2011-2022 走看看