js原型继承

原型链:
  Object(构造函数) object(类型(对象))

var o = {};
alert(typeof o); //结果是object
alert(typeof Object); //结果是function

  每一个对象都有一个属性叫 __proto__ ,这个属性就是这个对象的原型(o. __proto__),
函数可通过 函数名.prototype 获取原型,对象可以通过 对象.__proto__(双下划线)获取。

  对象有原型,原型也是对象,所以原型也有原型,所有的函数都是对象,继承自Function.prototype,
Function.prototype是对象,继承自Object.prototype,Object.prototype是对象,继承自null。

  obj是对象,继承自Object.prototype

  Function是对象,继承自Function.prototype
  Function是函数,继承自Function.prototype



js成员的访问规则:

  o.方法()

  首先在o当前这个类型中寻找该成员的定义,如果存在该成员的定义,那么就直接使用改成员;
如果该成员不再当前类型中,就访问其原型(原型链中的上一级)以此类推,直到null位置。



代码示例:
  不使用继承:

var Person = function() {
this.say = function() {
alert("你好");
};
};
var p1 = new Person();
var p2 = new Person();

alert(p1.say === p2.say); //结果为false

  每new一个对象,就会创建一块新的内存,所以p1.say和怕p2.say并不是引用的同一个地址

 使用原型继承:

var Person = function() {
};
Person.prototype = {
say:function(){
alert("Mr靖");
}
};
var p1 = new Person();
var p2 = new Person();
p1.__proto__.name = "Mr靖";

alert(p1.say === p2.say);   //结果是true
alert(p2.name);         //结果为"Mr靖"


 模拟c#中的类:

var o = {
say:function() {
  alert("你好,我是" +
  this.name + ",我今年" +
  this.age + "岁了,我是" +
  this.sex + "生");
},
get_Name : function() {
  return this.name;
},
set_Name : function(value) {
  this.name = value;
}
};

var Person = function(name,age,sex) {
  this.name = name;
  this.age = age;
  this.sex = sex;
};

Person.prototype = o;       //类似于让Person类继承父类o
var p1 = new Person("Mr靖", 19, "男");
p1.say();


 一般的继承做法:

var inherite = function(name) {
this.name = name;
};
var o = {
sayHello:function() {
alert("你好,我是" + (this.name||"不存在"));
}
};
inherite.call(o, "Mr靖");   //函数inherit中this.name=name相当于在对象o中添加name属性,并把"Mr靖"赋值给它
o.sayHello();
alert(o.name);
时间: 2024-11-08 20:17:16

js原型继承的相关文章

JS原型继承与类的继承

我们先看JS类的继承 1 <!DOCTYPE html> 2 <html> 3 4 <head> 5 <meta charset="UTF-8"> 6 <title>JS类的继承</title> 7 </head> 8 9 <body> 10 /* -- 类式继承 -- */ 11 <script type="text/javascript"> 12 //先声

JS原型继承和类式继承

类式继承(构造函数) JS中其实是没有类的概念的,所谓的类也是模拟出来的.特别是当我们是用new 关键字的时候,就使得"类"的概念就越像其他语言中的类了.类式继承是在函数对象内调用父类的构造函数,使得自身获得父类的方法和属性.call和apply方法为类式继承提供了支持.通过改变this的作用环境,使得子类本身具有父类的各种属性. JavaScript var father = function() { this.age = 52; this.say = function() { al

关于js原型继承

js的每个类都有一个prototype对象 访问对象的属性时,会先访问到对象自身是否有定义这个属性 如果没有定义,就会去访问对象所属类型的prototype对象是否有此属性 原型继承就是把类型的prototype指向一个父类的新对象,这样每派生一个新类出来都会构造一个新的父类对象作为原型,这个对象和父类的prototype是分离的 因而可以用于添加子类的新属性而不影响父类 > function cls(){xx = function(){console.log(11)}} undefined >

js - 原型继承和应用

前言:本文大体摘自:https://blog.csdn.net/sysuzhyupeng/article/details/54645430    这位CSDN博主写的十分的好,逻辑性很强.后面 "如何安全的扩展一个内置对象 " 是我添加的.顺便把这位博主的  详解js中extend函数  和  call和apply上手分析  摘抄下来. 原型继承:利用原型中的成员可以被和其相关的对象共享这一特性,可以实现继承,这种实现继承的方式,就叫做原型继承. 原型继承是js的一种继承方式,原型继承

JS 原型继承的几种方法

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <title>Document</title> </head> <body> <script type="text/javascript"> function Person() { this.name = '老王

我的博客园初篇 解密 js原型继承

网上的关于原型继承的文章多入牛毛 但是我感觉并不适合新手了解 首先假如这位新手了解过面向对象java啊 c#啊他会理解继承 但是和javascript的继承有有所不同,又假如这位新手初入前端 以前没了解过面向对象 你和他说一大堆术语 更加把他搞得蒙头转向.我在这里尝试用人类认知的模式来解释什么事原型继承以及为什么需要它. 从某种意义来说面向对象的三大特性在我看来是为了“偷懒”(纵观全世界科技发展莫不如此)而由聪明人想出来的法子,在代码世界中,代码的复用也就是多次使用时司空见惯的,比如你一进门就写

js原型继承的几种方式

1. 原型链继承 2,构造函数继承(对象冒充继承) 3,组合继承(原型链继承+构造函数继承) 4,原型式继承 5. 寄生组合式继承 一.原型链继承 function Show(){ this.name="run"; } function Run(){ this.age="20"; //Run继承了Show,通过原型,形成链条 } Run.prototype=new Show(); var show=new Run(); alert(show.name)//结果:ru

分享一个js原型继承的方法

function Person(){ this.color = [23,2,3,32] } undefined var p = Object.create(new Person()) undefined p.color.push(1)

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(){