原型链:
  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。

  o是对象,继承自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);

js原型继承的更多相关文章

  1. 【09-23】js原型继承学习笔记

    js原型继承学习笔记 function funcA(){ this.a="prototype a"; } var b=new funcA(); b.a="object a ...

  2. JS原型继承与类的继承

    我们先看JS类的继承 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> &l ...

  3. js原型继承四步曲及原型继承图

    一:js原型继承四步曲 //js模拟类的创建以及继承 //动物(Animal),有头这个属性,eat方法 //名字这个属性 //猫有名字属性,继承Animal,抓老鼠方法 //第一步:创建父类 fun ...

  4. JS原型继承和类式继承

    前言 一个多月前,卤煮读了一篇翻译过来的外国人写的技术博客.此君在博客中将js中的类(构造)继承和原型继承做了一些比较,并且得出了结论:建议诸位在开发是用原型继承.文中提到了各种原型继承的优点,详细的 ...

  5. 关于js原型继承

    js的每个类都有一个prototype对象 访问对象的属性时,会先访问到对象自身是否有定义这个属性 如果没有定义,就会去访问对象所属类型的prototype对象是否有此属性 原型继承就是把类型的pro ...

  6. js原型继承深入

    js采用原型继承来实现类的派生,但是原型链再深入点,我们又知道多少呢,现在不妨往下看: 先来一个原型继承: var M1 = function() { this.param = "m1's ...

  7. 前端面试题总结二(js原型继承)

    今天这篇文章整理了JS原型和继承的一些知识点,面试的时候  基!本!都!会!问!还不快认真阅读下文,看看你还有哪些知识点需要掌握吧~ 1.原型链 基本思想:利用原型让一个引用类型继承另外一个引用类型的 ...

  8. JS 原型继承的几种方法

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. JS 原型 & 继承

    理解原型链 先看看http://www.ituring.com.cn/article/56184和http://www.cavabiao.com/prototype-and-inherit-of-ja ...

随机推荐

  1. sql server 查询表某个字段不重复数据

    SELECT TOP (500) ID, Personname, Personcode, Telphone, Fraction into temp3 FROM Records AS a WHERE ( ...

  2. iOS 细节 问题

    1.当一个空指针(nil pointer)调用了一个方法会发生什么? 安然无恙 —— 这是oc自带的消息机制,nil也能发送消息,而不会报错 2.为什么retainCount绝对不能用在发布的代码中? ...

  3. Django1.7.1设置TEMPLATE_DIRS

    首先附上我的django工程目录结构: mysite│ db.sqlite3│ manage.py│├─mysite   │ settings.py   │ urls.py   │ views.py  ...

  4. 利用servlet做转发,实现js跨域解决同源问题

    做前端开发,避免不了跨域这个问题,跨域具体什么概念,不赘述,博客里太多.简单说下,我们用js发请求,不管post还是get,如果发请求的对象和当前web页面不在同一域名下,浏览器的同源策略会限制发请求 ...

  5. 从零开始学习MySQL3---数据库的基本操作

    创建数据库 MySQL安装完成后,将会在其Data目录下自动创建几个必需的数据库 可以用  SHOW DATABASES: 来查看当前存在的数据库 创建数据库是在系统磁盘上划分一块区域用于数据的存储和 ...

  6. Learning LexRank——Graph-based Centrality as Salience in Text Summarization(一)

    (1)What is Sentence Centrality and Centroid-based Summarization ? Extractive summarization works by ...

  7. [CF Round #295 div2] C. DNA Alignment 【观察与思考0.0】

    题目链接:C. DNA Alignment 题目大意就不写了,因为叙述会比较麻烦..还是直接看英文题面吧. 题目分析 经过观察与思考,可以发现,构造的串 T 的每一个字符都与给定串 S 的每一个字符匹 ...

  8. 《Zero to One》的一些读书笔记

    第一章<The Challenge of the Future>:全球化是横向的扩张,只能复制以前就有的成功,而科技创新是纵向的扩张,是创造以前不存在的东西.没有科技创新,只有全球化,这个 ...

  9. 2016 年开发者应该掌握的十个 Postgres 技巧

    [编者按]作为一款开源的对象-关系数据库,Postgres 一直得到许多开发者喜爱.近日,Postgres 正式发布了9.5版本,该版本进行了大量的修复和功能改进.而本文将分享10个 Postgres ...

  10. Android - N级树形结构实现

    目前已经实现3级之内的任意级树形结构展示(如果想增加更多级,需要扩展排序算法),并支持单选和多选(使用不同的适配器). 实现使用的控件:ListView 首先,最重要的应该是数据源的格式,支持树形结构 ...