原型链:
  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. 通过Servlet的response绘制页面验证码

    java部分 package com.servlet; import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; ...

  2. Install php-mcrypt on CentOS 6

    http://stackoverflow.com/questions/17109818/install-php-mcrypt-on-centos-6

  3. [topcoder]UnsealTheSafe

    http://community.topcoder.com/stat?c=problem_statement&pm=4471&rd=10711 这题果然是道简单题,图+DP.拿道题便觉 ...

  4. leetcode面试准备:Summary Ranges

    1 题目 Given a sorted integer array without duplicates, return the summary of its ranges. For example, ...

  5. Selenium 处理模态对话框

    模态对话框的原理 模态窗口 点击下一步的动作为,聚焦到“下一步”,然后直接回车 driver.FindElement(By.CssSelector("div.rg_btn a")) ...

  6. Unity Chan Advanced

    1. 8X MSAA 2. SMAA 3. ViewSpace Outline 4. Unity Chan Skin 5. Shift Toon Lighting 6. DOF 7. Bloom

  7. CXF Service Interceptor请求,响应报文之控制台输出

    一:定义接口 @WebService(targetNamespace = "http://www.unionpay.com/client/appprovider", name = ...

  8. poj 2975 Nim(博弈)

    Nim Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 5232   Accepted: 2444 Description N ...

  9. Redis教程03——Redis 发布/订阅(Pub/Sub)

    Pub/Sub 订阅,取消订阅和发布实现了发布/订阅消息范式(引自wikipedia),发送者(发布者)不是计划发送消息给特定的接收者(订阅者).而是发布的消息分到不同的频道,不需要知道什么样的订阅者 ...

  10. Treasure Hunt - POJ 1066(线段相交判断)

    题目大意:在一个正方形的迷宫里有一些交错墙,墙的两端都在迷宫的边缘墙上面,现在得知迷宫的某个位置有一个宝藏,所以需要砸开墙来获取宝藏(只能砸一段墙的中点),问最少要砸开几面墙.   分析:这个题意刚开 ...