`

js原型 prototype

阅读更多

   js原型是Js中非常重要的概念,每个函数(Js里面函数也是对象)都有一个叫prototype(即原型)的属性,不过在一般情况下它的值都是null,但是它有一项非常重要的功能就是所有实例都会共享它里面的属性和方法(这就是Js里面实现继承的基础)

  原型与原型链 体现OOP思想.

原型使用方式1:

 

 var Calculator = function (decimalDigits, tax) {                                         
       this.decimalDigits = decimalDigits;    
        this.tax = tax;      
  };

 Calculator.prototype = {         
   add: function (x, y) {   
             return x + y;          
  },       
     subtract: function (x, y) {   
             return x - y;           
 }        };      

//测试
var obj=new Calculator();
 alert(obj.add(1, 3));

 Calculator对象的prototype属性赋值对象字面量来设定Calculator对象的原型。
 

 原型使用方式2:

赋值原型prototype的时候使用function立即执行的表达式来赋值。

Calculator.prototype = function () { 

} ();

 

 封装私有的function,通过return的形式暴露出简单的使用名称,以达到public/private的效果 。

Calculator.prototype = function () {    
        add = function (x, y) {     
           return x + y;           
 },           
 subtract = function (x, y) {   
             return x - y;         
   }          
  return {          
      add: add,      
       subtract: subtract  
          }        } ();      

//测试
var obj=new Calculator();
alert(obj.add(11,3));

 

分步声明:

var BaseCalculator = function () {  
  //为每个实例都声明一个小数位数  
  this.decimalDigits = 2;
};     
   //使用原型给BaseCalculator扩展2个对象方法
BaseCalculator.prototype.add = function (x, y) {  
  return x + y;
};
BaseCalculator.prototype.subtract = function (x, y) { 
   return x - y;
};

 

首先,声明了一个BaseCalculator对象,构造函数里会初始化一个小数位数的属性decimalDigits,然后通过原型属性设置2个function,分别是add(x,y)和subtract(x,y),当然你也可以使用前面提到的2种方式的任何一种,我们的主要目的是看如何将BaseCalculator对象设置到真正的Calculator的原型上。

 

var BaseCalculator = function() {   
 this.decimalDigits = 2;
};
BaseCalculator.prototype = {  
  add: function(x, y) {  
      return x + y;    
},    subtract: function(x, y) { 
       return x - y;   
 }};

 

var Calculator = function () {  
  //为每个实例都声明一个税收数字  
  this.tax = 5;
};      
  Calculator.prototype = new BaseCalculator();

 

我们可以看到Calculator的原型是指向到BaseCalculator的一个实例上,目的是让Calculator集成它的add(x,y)和subtract(x,y)这2个function,还有一点要说的是,由于它的原型是BaseCalculator的一个实例,所以不管你创建多少个Calculator对象实例,他们的原型指向的都是同一个实例。

var calc = new Calculator();
alert(calc.add(1, 1));
//BaseCalculator 里声明的decimalDigits属性,在 Calculator里是可以访问到的alert(calc.decimalDigits); 

 

上面的代码,运行以后,我们可以看到因为Calculator的原型是指向BaseCalculator的实例上的,所以可以访问他的decimalDigits属性值,那如果我不想让Calculator访问BaseCalculator的构造函数里声明的属性值,这样处理

var Calculator = function () { 
   this.tax= 5;
};
Calculator.prototype = BaseCalculator.prototype;

 

通过将BaseCalculator的原型赋给Calculator的原型,这样你在Calculator的实例上就访问不到那个decimalDigits值了,如果你访问如下代码,那将会提升出错。

var calc = new Calculator();
alert(calc.add(1, 1));
alert(calc.decimalDigits);

 

重写原型: 

 在使用第三方JS类库的时候,往往有时候他们定义的原型方法是不能满足我们的需要,但是又离不开这个类库,所以这时候我们就需要重写他们的原型中的一个或者多个属性或function,我们可以通过继续声明的同样的add代码的形式来达到覆盖重写前面的add功能。

//覆盖前面Calculator的add() function 
Calculator.prototype.add = function (x, y) {  
  return x + y + this.tax;
};
var calc = new Calculator();
alert(calc.add(1, 1));

 

分享到:
评论
1 楼 hotbain 2013-04-19  









相关推荐

    JavaScript中的原型prototype完全解析

    JavaScript中的原型和prototype是理解该语言面向对象机制的核心概念之一,它支撑着JavaScript的“一切皆对象”的编程范式。接下来,我们将详细解析JavaScript中的原型和prototype,以及与之密切相关的__proto__属性...

    JS原型prototype和__proto__用法实例分析

    JavaScript中的原型(Prototype)机制是实现继承的一种方式,它涉及到两个关键的概念:`prototype`和`__proto__`。这两个属性在JavaScript的对象和函数中扮演着不同的角色。 首先,`prototype`属性主要用于函数对象...

    详解JavaScript中基于原型prototype的继承特性_.docx

    JavaScript中的原型(prototype)机制是实现继承的一种核心方式。由于JavaScript是一种基于原型的面向对象语言,它不支持传统的类(class)概念,因此其继承机制显得与众不同。在JavaScript中,对象可以直接从另一个...

    深入学习JavaScript中的原型prototype

    javascript 是一种 prototype based programming 的语言, 而与我们通常的 class based programming 有很大 的区别,我列举重要的几点如下: 1.函数是first class object, 也就是说函数与对象具有相同的语言地位 2.没有...

    原型设计模式prototype

    **原型设计模式(Prototype Pattern)**是一种创建型设计模式,它允许我们通过复制现有的对象来创建新对象,而不是通过构造函数来实例化新对象。在面向对象编程中,当我们需要频繁地创建具有相同或相似属性的对象时,...

    JavaScript原型链

    JavaScript原型链是JavaScript语言中的一个核心特性,它关乎对象之间的继承关系。在JavaScript中,一切皆为对象,而原型链则是实现对象间属性和方法共享的一种机制。理解原型链对于深入学习JavaScript至关重要。 ...

    js原型链详解

    ### JavaScript原型与原型链详解 JavaScript作为一门基于原型的语言,其原型和原型链的概念是理解和掌握JS继承机制的关键。接下来将详细阐述这些概念。 #### 普通对象与函数对象 在JavaScript中,一切皆为对象,...

    JavaScript_Prototype(源代码+中文手册).rar

    这个压缩包文件“JavaScript_Prototype(源代码+中文手册).rar”包含了关于JavaScript原型的源代码和中文手册,为学习和理解这一主题提供了丰富的资源。 JavaScript是一种动态类型的语言,其核心特性之一就是原型...

    JS:prototype用法

    ### JS:prototype用法详解 #### 一、概念解析与基本使用 `prototype`是JavaScript中一个非常重要的概念,尤其自IE4及其后续版本引入以来,成为开发人员扩展内置对象功能的强大工具。`prototype`主要服务于面向...

    prototype.js javaScript插件

    **JavaScript原型(Prototype)库详解** JavaScript是一种动态类型的编程语言,其灵活性和强大的对象操作能力使其在Web开发中占据重要地位。"Prototype.js"是一个针对JavaScript的开源库,旨在增强和扩展JavaScript的...

    JS中的prototype

    通过理解`prototype`以及与之相关的概念,如原型链、方法重写和`call()`,开发者可以更有效地利用JavaScript的面向对象特性,实现复杂的继承和扩展。在实际开发中,熟练掌握这些知识对于编写可维护和高效的代码至关...

    javascript prototype原型操作笔记.docx

    ### JavaScript Prototype原型操作知识点 #### 一、Prototype基础概念 **Prototype** 在 JavaScript 中是一个非常重要的概念,它支持面向对象编程中的继承特性。每个 JavaScript 对象都有一个内部属性 `[...

    原生JS原型对象练习

    在JavaScript的世界里,原型对象(Prototype)是理解对象继承机制的关键。这个练习旨在帮助学习者深入理解原型链的概念,这是JavaScript实现面向对象编程的核心部分。原生JS,即不依赖于像jQuery这样的库,让我们...

    JavaScript中的prototype(原型)属性研究

    在JavaScript中,每个函数都有一个prototype属性,这个属性指向一个对象,这个对象就是所谓的原型对象。当我们创建一个函数实例时,实例会自动获取一个内部属性[[Prototype]],这个属性通常通过`__proto__`或者`...

    浅谈js构造函数的方法与原型prototype

    在JavaScript编程中,构造函数和原型prototype是实现面向对象编程的关键特性,它们允许开发者以一种更加结构化和模块化的方式组织代码。为了深入理解这两个概念及其用途,下面将详细阐述构造函数和原型的相关知识点...

    js原型通用验证框架

    JavaScript原型通用验证框架是一种基于JavaScript设计模式的高效验证工具,其核心原理是利用JavaScript的原型(prototype)特性来实现对象的扩展与复用,从而达到代码的模块化和可维护性。这一框架广泛应用于Web开发...

    JavaScript的prototype

    JavaScript中的`prototype`是一个核心概念,它涉及到对象继承和函数原型。在JavaScript中,每创建一个函数,该函数就会自动获得一个名为`prototype`的属性,这个属性是一个对象,用于实现对象间的继承。同时,每个...

    js遍历属性 以及 js prototype 和继承

    在JavaScript中,`prototype`是一个对象,用于实现原型继承。每个函数(也称为构造器)都有一个`prototype`属性,这个属性是一个对象,当通过该函数创建新对象时,新对象会将这个`prototype`对象作为其内部`[...

    prototype.js 1.4-1.6[全]

    该库的核心特性是其对JavaScript原型(prototype)机制的深入利用,使得JavaScript对象的继承和扩展更为简洁、高效。在"Prototype.js 1.4-1.6[全]"的压缩包中,包含了这个库从1.4到1.6版本的完整集合,这将为我们...

Global site tag (gtag.js) - Google Analytics