`

js原型理解

阅读更多

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

JavaScript 中, prototype 对象是实现面向对象的一个重要机制。每个函数就是一个对象( Function ),函数对象都有一个子对象 prototype 对象,类是以函数的形式来定义的。 prototype 表示该函数的原型,也表示一个类的成员的集合。在通过 new 创建一个类的实例对象的时候, prototype 对象的成员都成为实例化对象的成员。

function 定义的对象有一个 prototype 属性,使用 new 生成的对象就 没有 这个 prototype 属性

    prototype 属性 又指向了一个 prototype 对象 ,注意 prototype 属性 prototype 对象 是两个不同的东西,要注意区别。在 prototype 对象中又有一个 constructor 属性,这个 constructor 属性 同样指向一个 constructor 对象 ,而这个 constructor 对象恰恰就是这个 function 函数本身,见下图示例:

 


 

    验证代码:

function Person(name)   
{   
   this.name=name;   
   this.showMe=function()   
        {   
           alert(this.name);   
        }   
};   
  
var one=new Person('js');   
  
alert(one.prototype)//undefined   
alert(typeof Person.prototype);//object   
alert(Person.prototype.constructor);//function Person(name) {...}; 
  

  实例是通过构造函数创建,但是跟构造函数没有直接关系,其内部的 __proto__ 属性 指向了 prototype ,而 prototype (原型)的 constructor 指向了构造函数,构造函数的 prototype 属性指向了原型( prototype ),所以说实例跟构造函数都是通过 prototype 发生了关系....


继承的实现很简单,只需要把子类的 prototype 设置为父类的一个(实例化)对象 即可。注意这里说的可是对象哦!

那么通过 prototype 属性实现继承的原理是什么呢?还是先看图形说明,然后编写代码进行验证。

 

 

      注意:红色的方框就是把子类与父类链接起来的地方。这个就应该是传说中的 prototype 链了吧。下面有代码进行验证。

function Person(name){   
   this.name=name;   
   this.showMe=function(){   
           alert(this.name);   
        }   
};   
  
Person.prototype.from=function(){   
  alert('I come from prototype.');   
}   
var father=new Person('js');//为了下面演示使用showMe方法,采用了js参数,实际多采用无参数   
alert(father.constructor);//查看构造函数,结果是:function Person(name) {...}; 
  
function SubPer(){ 
}   

SubPer.prototype=father;//注意这里   
SubPer.prototype.constructor=SubPer;   
  
var son=new SubPer();   
son.showMe();//js   
son.from();//I come from prototype.   
alert(father.constructor);//function SubPer(){...}   
alert(son.constructor);//function SubPer(){...}   
alert(SubPer.prototype.constructor);//function SubPer(){...}
 

 

 

  • 大小: 61.5 KB
  • 大小: 99.4 KB
  • 大小: 82.9 KB
分享到:
评论

相关推荐

    深入理解javascript原型和闭包

    深入理解javascript原型和闭包(01)——一切都是对象 深入理解javascript原型和闭包(02)——函数和对象的关系

    js 原型对象和原型链理解

    之前对js中的原型链和原型对象有所了解,每当别人问我什么是原型链和原型对象时,我总是用很官方(其实自己不懂)的解释去描述。有一句话说的好:如果你不能把一个很复杂的东西用最简单的话语描述出来,那就说明你...

    js原型链详解

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

    JavaScript原型链

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

    深入理解javascript原型和闭包.pdf

    JavaScript原型和闭包是这门语言中两个比较难以理解且与其他面向对象语言区别较大的概念。理解这两个概念,不仅能让我们更深层次地理解JavaScript,而且有助于我们了解编程语言的设计思路,拓宽我们的视野。 首先,...

    原生JS原型对象练习

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

    理解Javascript原型继承原理

    ### 理解Javascript原型继承原理 #### 一、引言 在JavaScript中,原型继承是一种非常核心且独特的机制,它使得对象能够继承其他对象的属性和方法。本文旨在深入探讨这一机制,并通过具体的示例代码帮助读者更好地...

    js原型的个人理解

    ### JS原型的个人理解 #### 引言 在JavaScript中,原型(Prototype)是一个非常核心的概念,它决定了对象之间的继承关系以及属性查找机制。本文将深入探讨JS原型的基本原理、实现方式及其应用,并通过具体示例帮助...

    js原型通用验证框架

    了解并掌握这些知识点,将有助于你理解和使用这个JavaScript原型验证框架,从而提升你的前端开发技能。同时,深入学习CSS布局(如CSS+DIV)也是必不可少的,它可以帮助你更好地定制验证错误提示的样式。

    基于js原型链的小游戏

    JavaScript是Web开发中不可或缺的一部分,尤其在前端领域,它的强大在于动态性和灵活性。在这个"基于js原型链的小游戏"中,我们...这不仅是一个理解JavaScript原型链的好例子,也是实践前端开发技能的绝佳实践项目。

    我所理解的从原型到原型链.pdf

    在JavaScript中,理解原型(Prototype)与原型链(Prototype Chain)是至关重要的。这两个概念是语言的核心部分,对于深入理解对象的属性查找机制、继承等方面有着不可替代的作用。 #### 原型(Prototype) 在...

    JS原型与原型链的深入理解

    JavaScript中关于原型与原型链的理解是深入学习该语言的一个重要环节。这篇文章为我们提供了深入探讨这个话题的机会,并详细解释了普通对象与函数对象之间的区别,原型的概念,原型链的工作原理,以及constructor...

    【技术分享】从浅入深 Javascript 原型链与原型链污染 .pdf

    本文将深入探讨JavaScript原型链的工作原理及其可能导致的安全问题——原型链污染。 首先,JavaScript 中的对象继承并不像传统面向对象语言那样基于类,而是通过原型链机制。每个对象都有一个内部属性`[[Prototype]...

    深入理解javascript原型和闭包1

    JavaScript是一种动态类型的...通过这些深入的讲解,你应该能更好地理解JavaScript中对象、原型、函数和闭包的工作原理,为你的JavaScript开发打下坚实的基础。在实际编程中,灵活运用这些知识可以解决许多复杂的问题。

    JS原型和原型链原理与用法实例详解

    JS原型和原型链是JavaScript语言中的核心概念,它们构成了JavaScript对象继承的基础。在JavaScript中,对象可以通过原型链实现对其他对象的属性和方法的继承。下面我们将详细讲解这两个概念以及它们的工作原理。 **...

    Toastjs一个JavaScript原型吐司消息

    "Toastjs一个JavaScript原型吐司消息" 这个标题指的是一个名为Toast.js的JavaScript库,它主要用于实现"吐司"(Toast)消息功能。在UI设计中,吐司消息是一种轻量级的通知方式,通常用于显示短暂、非中断性的提示...

Global site tag (gtag.js) - Google Analytics