原型prototype

JS对象的比较

由于JS是解释执行的语言,那么代码中出现函数与对象如果重复执行,会创建多个副本

  1. 创建一个Person构造函数,要求有name,age,gender,sayHello
  2. 代码如下:
     function Person(name,age,gender){
         this.name=name;
         this.age=age;
         this.gender=gender;
         this.sayHello=function(){};
     }
    
  3. 这种构造函数会影响性能,容易造成多个对象有多个对象副本,应该将方法单独抽取出来,让所有的对象共享该方法. 代码如下:
     function sayHello(){};
     function Person(name,age,gender){
             this.name=name;
             this.age=age;
             this.gender=gender;
             this.sayHello=sayHello;
         }
    
  4. 可以考虑将方法全部放到外面,但是有安全隐患
    • 在开发中会引入各种框架和库,自定义的成员越多,出现命名冲突的几率越大
    • 在开发中会有多个构造函数,,每一个构造函数有很多方法,就会变得不容易维护
  5. 解决办法是外面的函数不占用名字,而且在构造函数旗下就可以了
  6. 每一个构造函数在定义的时候,都会有一个神秘对象被创建出来
  7. 每一个由构造函数创建出来的实例对象都会默认的连接到该神秘对象上 代码如下:
    function Person(name,age,gender){
                this.name=name;
                this.age=age;
                this.gender=gender;
            }
     Person.prototype.sayHello=function(){
            console.log( ‘hello!‘ ) ;
     };
    var p1=new Person(‘张三‘,10,‘male‘);
    p1.sayHello()
    var p2=new Person(‘张四‘,13,‘male‘);
    p2.sayHello();
  1. 该神秘对象就是prototype,由构造函数创建出来的众多对象共享的一个对象
  2. 只需要将共享的东西,重复会多占用内存的东西放到构造函数.prototype中,那么所有的对象都可以共享

原型相关的概念

  1. 关于面向对象的概念

    • 类 class 在js中就是构造函数

      • 在传统的面向对象语言中,使用一个叫类的东西定义模版,然后使用模版创建对象
      • 在构造方法中也具有类似的功能,因此称其为类
    • 实例与对象
      • 实例一般是指某一个构造函数创建出来的对象,我们称这个对象为这个构造函数的实例
      • 实例就是一个对象,对象是一个泛称
    • 键值对与属性和方法
      • 在js中键值对的集合称为对象
      • 如果值为数据(非函数),就称该键值对为对象的属性 property
      • 如果值为函数,就称为对象的方法 method
    • 父类与子类
      • 传统的面向语言中使用类来继承,就有父类,子类的概念
      • 父类又称为基类, 子类又称为派生类
      • 在 js 中常常称为父对象, 子对象. 基对象, 派生对象
  2. 原型相关的概念
    • 神秘对象针对构造函数称为 "原型属性"

      • 神秘对象就是构造函数的原型属性
      • 简称原型
    • 神秘对象针对构造函数创建出来的对象称为"原型对象"
      • 当访问实例对象的属性时或方法时,如果构造函数没有,就到到对应的原型对象中去找
      • 简称原型
    • 对象继承自其原型
      • 构造函数创建的对象 继承自 构造函数的原型属性
      • 构造函数创建的对象 继承自 该对象的原型对象
      • 构造函数创建的对象与构造函数的原型属性表示的是两个不同的对象
        • 原型中的成员可以直接被实例对象所使用
        • 实例对象继承自原型
        • 这样的继承就是 "原型继承"
  3. 如何使用原型
    • 使用对象的动态特性

      • 构造函数.prototype.XXX = vvvv;
    • 直接替换
        Student.prototype = {
             sayHello: function () {},
             study: function () {}
         };
时间: 2025-01-03 22:08:30

原型prototype的相关文章

JS原型,Prototype,原型

对于javascript这样一种前端语言,个人觉得,要真正的理解其oop, 就必须要彻底搞清楚javascript的对象,原型链,作用域,闭包,以及this所引用的对象等概念.这些对弄明白了,应该就可以比较自信的驾驭这种语言了. 大家都知道,javascript中的继承不是使用的类继承的机制,而是使用的另一种方式 – 原型继承.在原型继承方式中,本质上是javascript语言加入原型链这种机制,从而实现了面向对象的重要特性之一 – 继承.在这篇博文中,基于个人的理解,来说说javascript

[js高手之路]一步步图解javascript的原型(prototype)对象,原型链

我们接着上文继续,我们通过原型方式,解决了多个实例的方法共享问题,接下来,我们就来搞清楚原型(prototype),原型链的来龙去脉. function CreateObj(uName) {             this.userName = uName;         }         CreateObj.prototype.showUserName = function(){             return this.userName;         }         va

克隆复制可使用原型( Prototype)设计模式

今天有学习设计模式的原型(Prototype)<设计模式--原型(Prototype)模式>http://www.cnblogs.com/insus/p/4152773.html .为了加强了解与认识,现再做一个练习. 创建一个原型接口: 创建一个用户控件,并实现接口: 现在网页中有一个按钮,用户点一点这个铵钮,能动态添加这个用户控件,每点击一次,克隆复制一个: 演示: 源代码下载:http://download.cnblogs.com/insus/CSharpNET/uc_prototype

原型prototype、原型链__proto__、构造器constructor

创建函数时,会有原型prototype,有原型链__proto__,有constructor.(构造函数除外,没有原型) . prototype原型:是对象的一个属性(也是对象),使你有能力向对象添加属性和方法. __proto__原型链:指向创建它的函数对象的原型对象prototype. constructor构造器:返回创建此对象的函数. 创建一个函数 这个函数的constructor返回的是js底层的函数Function,它的原型链__proto__是function.__proto__是

理解原型Prototype、继承

原型一直都是js中比较难理解的一块,那么原型究竟是什么,原型链又是什么? 原型Prototype是指当我们只要创建一个新的函数,就会根据特定的规则为这个函数创建一个prototype属性,这个属性指向函数的原型对象,原型对象通过其自身的constructor属性中的指针又指向拥有prototype属性的函数,也可以说是构造函数. 原型链是指如果让一个函数a的原型对象等于另一个类型b的实例,那么此时的a的原型对象就包含一个指向b的原型对象的指针,相应的,b的原型中包含指向构造函数b的指针,如果b的

对象 原型prototype

一.对象   1. var person={          name:"kobe",//键值必须用,间隔          "age":30,          sayName:function(){              console.log("i'm"+this.name);          }     }; 可配置性:指明该属性是否可以修改.删除   可删除configurable:true/false   若 configur

js之内置对象Function、Object与自定义函数间原型prototype间的关系图

注意:内置的函数对象Funtion的原型prototype是Object的实例,但却是function类型.Function.prototype instanceof Object; // true --- 是Object的实例Function.prototype instanceof Function ;// falsetypeof Function.prototype ; // "function" --- 是function类型.

简单理解javascript的原型prototype

原型和闭包是Js语言的难点,此文主要讲原型. 每一个方法都有一个属性是 prototype 每一个对象都有一个属性是 _proto_ 一旦定义了原型属性或原型方法,则所有通过该构造函数实例化出来的所有对象,都继承了这些原型属性和原型方法,这是通过内部的_proto_链来实现的. /* Js所有的函数都有一个prototype属性,这个属性引用了一个对象,即原型对象,也简称原型.这个函数包括构造函数和普通函数,我们讲的更多是构造函数的原型,但是也不能否定普通函数也有原型. 每一个方法都有一个属性叫

原型(Prototype)模式

原型模式属于对象的创建模式.通过给出一个原型对象来指明所有创建的对象的类型,然后用复制这个原型对象的办法创建出更多同类型的对象.这就是原型模式的用意.原型模式的结构 原型模式要求对象实现一个可以“克隆”自身的接口,这样就可以通过复制一个实例对象本身来创建一个新的实例.这样一来,通过原型实例创建新的对象,就不再需要关心这个实例本身的类型,只要实现了克隆自身的方法,就可以通过这个方法来获取新的对象,而无须再去通过new来创建.原型模式有两种表现形式:简单形式.登记形式,这两种表现形式仅仅是原型模式的

Javascript中的原型prototype

prototype属性可算是JavaScript与其他面向对象语言的一大不同之处. 简而言之,prototype就是“一个给类的对象添加方法的方法”,使用prototype属性,可以给类动态地添加属性和方法,以便在JavaScript中实现“继承”的效果. 通过以此函数作为构造函数构造出来的对象都自动的拥有构造函数的prototype对象的成员属性和方法. 其中的要点是: prototype是函数(function)的一个必备属性(书面一点的说法是"保留属性")(只要是function