• 原型


    1.在默认情况下,所有原型对象都会自动获得一个constructor属性,这个属性包含一个
    指向prototype属性所在函数的指针。

    2.ES5增加的一个新方法 返回对象的原型 isPrototypeOf()

    3.可以通过对象实例访问保存在原型的值,但是不能通过对象实例重写原型的值。如果
    在实例中添加一个属性,该属性与实例原型中的一个属性同名,那在实例中创建的该属
    性,就会屏蔽原型中的这个属性。虽然是屏蔽了,但是不会修改原型中的这个属性值,
    可以使用delete,把实例中的这个属性删除。从而继续访问原型中的这个属性。

    4.使用hasOwnProperty()方法可以检测一个属性是存在于实例中,还是存在于原型中
    。这个方法是从Object中继承来的,只在给定属性存在于对象实例中,才会返回true.

    function Person(){}

    Person.prototype.name="Nicholas";
    Person.prototype.age=29;
    Person.prototype.job="Software 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); //"Greg"----来自实例
    alert(person1.hasOwnProperty("name")); //true

    alert(person2.name); //"Nicholas" 来自原型
    alert(person2.hasOwnProperty("name")) //false

    delete person1.name;
    alert(person1.name); //"Nicholas" 来自原型
    alert(person1.hasOwnProperty("name")) //false


    5.更简单的原型语法
    function(){}

    Person.prototype={
    constructor:Person,
    name:"Nicholas",
    age:29,
    job:"Software Engineer",
    sayName:function(){
    alert(this.name);
    }
    }


    6.实例中的指针指向原型,而不是指向构造函数

    function Person(){}

    var friend=new Person();

    Person.prototype={
    constructor:Person,
    name:"Nicholas",
    age:29,
    job:"Software Engineer",
    sayName:function(){
    alert(this.name);
    }
    }

    friend.sayName();//error


    这段代码发生了错误。首先创建了Person的一个实例,然后写了一个构造函数。最后写
    了原型对象。在中间写个构造函数,就相当于重写了原型对象,而实例中的指针指向原
    型,不是构造函数。构造函数中没有name属性。所以导致报错。


    7.组合使用构造函数和原型模式。。就是构造函数模式用于定义实例属性,而原型模式
    用于定义方法和共享的属性。。这样,每个实例都会有自己的一份实例属性的副本,但
    同时又共享着对方法的引用。

    function Person(name,age,job){
    this.name=name;
    this.age=age;
    this.job=job;
    this.friend=["Shelby","Court"];
    }

    Person.prototype={
    constructor:Person,
    sayName:function(){
    alert(this.name);
    }
    }

    var person1=new Person("Nicholas",29,"Software Engineer");
    var person2=new Person("Greg",27,"Doctor");

    person1.friend.push("Van");
    alert(person1.friend); //"Shelby,Court,Van"
    alert(person2.friend); //"Shelby,Court"
    alert(person1.friend===person2.friend); //false
    alert(person1.sayName===person2.sayName); //true

  • 相关阅读:
    深入理解javascript原型和闭包(5)——instanceof
    深入理解javascript原型和闭包(4)——隐式原型
    启动mongodb的方式
    继承的几种方式
    npm install express 安装失败
    npm insta --savell和npm install --save-dev的区别
    express笔记之一安装
    mongoVUE安装配置
    nodejs笔记之一简介
    nodejs配置之二NPM配置之gulp使用时出现的错误
  • 原文地址:https://www.cnblogs.com/chaofei/p/5912041.html
Copyright © 2020-2023  润新知