zoukankan      html  css  js  c++  java
  • shui-prototype原型

    一、JavaScript常识?

      1、Javascript也是面向对象的语言,但它是一种基于原型Prototype的语言,而不是基于类的语言

      2、Javascript中所有的东西都由Object衍生而来, 即所有东西原型链的终点指向Object.prototype

      3、JS中所有的东西都是对象

    二、什么是prototype?

      1、每个函数都有一个prototype(原型)属性,这个属性是一个指针,指向一个对象

      2、在默认情况下,所有原型对象都会自动获得一个constructor(构造函数)属性

    三、为什么要用prototype?

      1、可以让所有对象实例共享它所包含的属性和方法。

      2、不必在构造函数中定义对象实例的信息,而是可以将这些信息直接添加到原型对象中, 

    !!! - JavaScript  

      function Person(){}
      Person.prototype.name = 'mychirs';
      Person.prototype.age = 29;
      Person.prototype.job = 'Software Engineer';
      Person.prototype.sayName = function(){
        alert(this.name);
      };

      var person1 = new Person();               //只需要new一下,就可以调用Person函数的属性
      person1.sayName();//'mychirs'

      var person2 = new Person();    // //只需要new一下,就可以调用Person函数的属性
      person2.sayName();//'mychirs'

      alert(person1.sayName == person2.sayName);//true

      在此,我们将sayName()方法和所有属性直接添加到了Person的prototype属性中,构造函数变成了空函数。即使如此,也仍然可以通过调用构造函数来创建新对象,而且新对象还会具有相同的属性和方法。但与构造函数模式不同的是,新对象的这些属性和方法是由所有实例共享的。换句话说.personl和person2访问的都是同一组属性和同一个sayName()函数。要理解原型模式的T作原理,必须先理解ECMAScript巾原型对象的性质。

    四、理解原型对象

      无论什么时候,只要创建了一个新函数,就会根据一组特定的规则为该函数创建一个prototype属性,这个属性指向函数的原型对象。

      在默认情况下,所有原型对象都会自动获得一个constructor(构造函数)属性,这个属性包含一个指向prot otype属性所在函数的指针。

      就拿前面的例子来说,Person.prototype. constructor措向Person。而通过这个构造函数,我们还可继续为原型对象添加其他属性和方法。
      创建了自定义的构造函数之后,其原型对象默认只会取得constructor属性;至于其他方法,则都是从Obj ect继承而来的。当调用构造函数创建一个新实例后,该实例的内部将包含—个指针(内部属性),指向构造函数的原型对象。ECMA-262第5版中管这个指针叫[[Prototype】]。虽然在脚本中没有标准的方式访问【[ Prototype]],但Firefox、Safari和Chrome在每个对象上都支持一个属性—proto_;而在其他实现中,这个属性对脚本则是完全不可见的。

      不过,要明确的真正重要的一点就是,这个连接存在于实例与构造函数的原型对象之间,而不是存在于实例与构造函数之间。

    ECMAScript 5增加了一个新方法,叫Object.getPrototypeOf(),在所有支持的实现中,这个方法返回[[PrototypeJ]]的值。例如:

      alert(Object.get PrototypeOf(personl) == Person.prototype); //true
      alert(Object.get PrototypeOf(personl).name ); //'Nicholas'

  • 相关阅读:
    【c# 学习笔记】使用virtual和override关键字实现方法重写
    【c# 学习笔记】多态
    【c# 学习笔记】子类的初始化顺序
    mybatis入门截图二
    解析xml文件,遍历输出xml文件中的所有节点, 最终模仿实现struts2框架自动封装参数的功能
    mybatis入门截图总结
    springMVC入门截图
    OA项目总结3
    修改struts2自定义标签的源代码,在原有基础上增加功能(用于OA项目权限判断,是否显示某个权限)
    ongl表达式中得到对象,调用对象方法(OA项目权限显示模块)
  • 原文地址:https://www.cnblogs.com/xiaoyangtian/p/7928990.html
Copyright © 2011-2022 走看看