zoukankan      html  css  js  c++  java
  • 原型模式

    1.什么是原型模式?有什么用?

    是一个指向对象的指针。可以让所有对象实例包含它所包含的所有属性和方法,不必在构造函数中定义对象实例的信息。

    function Person(){}
    
    Person.prototype.name="jack";
    Person.prototype.age=29;
    Person.prototype.job="engineer";
    Person.prototype.sayName=function(){
        alert(this.name);
    };
    
    var person1 = new Person();
    person1.sayName();
    
    var person2 = new Person();
    person2.sayName();
    
    alert(person1.sayName == person2.sayName);//"jakc"

     2.相关的方法有哪些?

    isPrototypeOf()方法:确定对象之间是否存在某种关系

    alert(Person.prototype.isPrototyoeOf(person1)); //true

    Object.getPrototypeOf()方法:返回[[Prototype]]的值。可以方便地获取一个对象的原型

    alert(Object.getPrototypeOf(person1) == Person.prototype); //true
    alert(Object.getPrototypeOf(person1).name) //"Nicholas"

    先从实例中找,如果实例中不存在该属性,那就从原型中去找。

    hasOwnProperty()方法:检测一个属性是存在于实例中还是原型中。

    function Person(){}
    
    Person.prototype.name="Nicholas";
    Person.prototype.age=29;
    Person.prototype.job="engineer";
    Person.prototype.sayName=function(){
        alert(this.name);
    };
    
    var person1 = new Person();
    var person2 = new Person();
    
    alert(person1.hasOwnProperty("name"));//false
    
    
    person1.name = "Greg";
    alert(person1.name);//G
    alert(person1.hasOwnProperty("name"));//true
    
    alert(person2.name);//N
    alert(person2.hasOwnProperty("name"));//flase
    
    delete person1.name;
    alert(person1.name);//N
    alert(person1.hasOwnProperty("name"));//false

    只有当person1重写name属性后才会返回true,因为只有这时候name才是一个实例属性,而非原型属性。

    hasPrototypePrototype(): alert(hasPrototypeProperty(person,"name")); 

    Object.keys()方法:

    function Person(){}
    
    Person.prototype.name="Nicholas";
    Person.prototype.age=29;
    Person.prototype.job="engineer";
    Person.prototype.sayName=function(){
        alert(this.name);
    };
    
    var keys = Object.keys(Person.prototype);
    alert(keys);//"name,age,job,sayName"
    
    var p1 = new Person();
    p1.name = "Rob";
    p1.age = 31;
    var p1keys = Object.keys(p1);
    alert(p1keys); //"name,age"

    接收一个对象作为参数,返回一个包含所有可枚举属性的字符串数组(按顺序)。

    Object.getOwnPropertyName()方法:

    var keys = Object.getOwnPropertyNames(Person.prototype);
    alert(keys);  //constructor,name,age,job,sayName

    Object.keys()和Object.getOwnPropertyNames()方法都可以用来替代for-in循环

    Object.defineProperty():

  • 相关阅读:
    类加载器
    会话机制
    数据库读写分离
    代码优化工具
    杀毒软件框架设计
    树状结构
    spring依赖注入
    never stop believe yourself
    利用callKit实现电话防骚扰
    mac上使用使用rz,sz命令
  • 原文地址:https://www.cnblogs.com/n2meetu/p/6741862.html
Copyright © 2011-2022 走看看