基于原型继承的JavaScript对象系统

原型编程范型

  基于原型链的委托机制就是原型继承的本质。

  原型编程范型的基本原则:

  1. 所有的数据都是对象。

  2. 要得到一个对象,不是通过实例化类,而是找到一个对象作为原型并克隆它

  function Person(name){

    this.name=name;

  }

  Person.prototype.getName=function()

  {

    return this.name=name;

  }

  var a=new Person(‘sven‘);

  console.log(a.name);//sven

  console.log(a.getName());//sven

  console.log(Object.getPrototypeOf(a)===Person.prototype);//true

  在这里Person不是类,而是函数构造器,JS的函数调用既可以作为普通函数被调用,也可以作为构造器被调用,当使用new运算符来调用函数的时,此时的函数就是一个构造器。用new运算符来创建对象的过程,实际上也只是先克隆Object.prototype对象,再进行一些其他额外操作的过程。

  3. 对象会记住它的原型。

    在js原型链查找机制中,每个对象至少应该先记住它自己的yuanx;JS给对象提供了一个名为_proto_的隐藏属性,某个对象的_proto_属性会指向它的构造器的原型对象。

  4.  如果对象无法响应某个请求,它会把这个请求委托给它自己的原型。

  当一个对象无法响应某条请求的时候,它会顺着原型链把请求传递下去,直到遇到一个可以处理该请求的对象为止。虽然js的对象最初都是由Object.prototype对象克隆而来的,但对象构造器的原型并不仅限于Object.prototype上,而是可以动态地指向其他对象。

  var A=function(){};
  A.prototype={name:‘sven‘};

  var B=function(){};
  B.prototype=new A();

  var b=new B();
  console.log(b.name);//sven

  

时间: 2024-10-29 09:44:18

基于原型继承的JavaScript对象系统的相关文章

javascript对象创建及原型继承的研究

今天总结了下javascript关于原型继承和对象创建方面的东西,因为javascript的原型继承在使用传统面向对象语言开发的同学看来比较怪异,原型继承确实比传统OOP语言的继承理解和运用起来困难一些,当然个人觉得传统OOP的继承相对比较简单,因为中规中矩. 下面逐个的用示例说明javascript中对象创建方式,专业一点叫什么模式,主要有直接单个创建:工厂模式:提出方法类函数公用方式:构造函数模式:构造函数+原型方式:使用原型本质的方式构建(这种受过李站的<悟透javascript>一书的

深刻理解JavaScript基于原型的面向对象

主题一.原型 一.基于原型的语言的特点 1 只有对象,没有类;对象继承对象,而不是类继承类. 2  "原型对象"是基于原型语言的核心概念.原型对象是新对象的模板,它将自身的属性共享给新对象.一个对象不但可以享有自己创建时和运行时定义的属性,而且可以享有原型对象的属性. 3 除了语言原生的顶级对象,每一个对象都有自己的原型对象,所有对象构成一个树状的层级系统.root节点的顶层对象是一个语言原生的对象,其他所有对象都直接或间接继承它的属性. 显然,基于原型的语言比基于类的语言简单得多,我

通过JavaScript原型链理解基于原型的编程

零.此文动机 用了一段时间的Lua,用惯了Java C++等有Class关键字的语言,一直对Lua的中的面向对象技术感到费解,一个开源的objectlua更是看了n遍也没理解其中的原理,直到看到了Prototype-based programming 一.什么是基于原型的编程 基于原型的编程是面向对象编程的一种形式,通过复制已经存在的原型对象来实现面向对象,无与基于类的编程较大的区别是没有Class关键字,但是有类的概念.基于原型的编程也可以理解成基于实例的编程. 基于原型的系统可以在程序运行时

JavaScript 原型继承开端

1.原型继承本质       就javascript对象系统的实现来讲,对象并没有原型,而构造器有原型(构造器.prototype指向其原型).对象只有构造自某个原型的说法,并没有持有某个原型的说法.原型其实也是一个对象实例.原型的含义是指:如果构造器有一个原型对象A,则由该构造器创建的实例都必然复制自A. 2.空的对象是所有对象的基础 来看看以下代码: 1 <html> 2 <head> 3 <meta http-equiv="content-type"

javascript: 基于原型的面向对象编程

Douglas Crockford指出javascript是世界上最被误解的编程语言.由于javascript缺少常见的面向对象概念,许多程序猿认为javascript不是一个合适的语言.我在做第一个javascript项目时候也发现不能将代码放在一个类中.其实大部分程序猿不知道javascript可以面向对象. 浏览器大战时代,Netscape的执行官招来了一个叫Brendan Eich的聪明人,发明了livescript(就是现在的javascript)语言,用来运行在浏览器端.它不像c++

JavaScript对象 原型

javascript对象就是一组数据和功能的集合,除原始类型(string.number.boolean.null.undefined)之外,其余都是对象. 可以通过对象直接量(字面量).new.和Object.create()(ECMAScript5)来创建对象. //new var person = new Object(); person.name = "YuanSong"; person.age = 28; //对象字面量 var person = { name : "

JavaScript对象分类

JavaScript 中的对象分类 我们可以把对象分成几类. 宿主对象(host Objects):由 JavaScript 宿主环境提供的对象,它们的行为完全由宿主环境决定. 内置对象(Built-in Objects):由 JavaScript 语言提供的对象. 固有对象(Intrinsic Objects ):由标准规定,随着 JavaScript 运行时创建而自动创建的对象实例. 原生对象(Native Objects):可以由用户通过 Array.RegExp 等内置构造器或者特殊语法

JS 类继承 原型继承

参考文档:JS原型继承和类继承 <script src="jquery-2.0.3.js"> </script> <script> /*//类继承 var father=function(){ this.age=53; this.say=function(){ console.log("name:"+this.name+",age:"+this.age); } }; var child=function(){

JS基础:基于原型的对象系统

简介: 仅从设计模式的角度讲,如果我们想要创建一个对象,一种方法是先指定它的类型,然后通过这个类来创建对象,例如传统的面向对象编程语言 "C++"."Java" 等:另一种方式是,我们不需要关心对象的具体类型,而是找到一个对象,然后通过克隆来创建一个一模一样的对象,就像所有吸血鬼故事必然有一个吸血鬼祖先一样,在 "Javascript" 世界中 "Object" 对象就是这个吸血鬼祖先,所有其他对象都是继承自 "Ob