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():

  • 相关阅读:
    gulp常用插件之gulp-plumber使用
    gulp常用插件之gulp-load-plugins使用
    gulp常用插件之yargs使用
    ql自动化测试之路-概述篇
    ql的python学习之路-day11
    ql的python学习之路-day10
    ql的python学习之路-day9
    python实现简易工资管理系统(Salary Manage)源码
    python控制台实现打印带颜色的字体
    ql的python学习之路-day8
  • 原文地址:https://www.cnblogs.com/n2meetu/p/6741862.html
Copyright © 2011-2022 走看看