js对象分为2种

函数对象和普通对象

函数对象 比如

function Show(){}
var x=function Show2(){}
var b=new Function("show3","alert('bb')")

show、x、b都是函数对象 是可执行的 并且构造出普通对象

普通对象

var showobje=new Show()
var xobj=new x();
var bobj=new b();
var c={}

这些对象 都是普通对象

函数对象有个属性prototype,作用就是实现继承,他们指向一个自己构造的对象  比如 第一个function Show(){}的protoype就是: Show.prototype=new Show();

通过构造器构造的普通对象都有个一隐藏属性__proto__  这个属性指向他构造器prototype(普通对象是没有prototype)

以下面这个代码为例 来解释是怎么实现继承的

 function Person(name, age) {

            this.name = name;
this.age = age;
}
Person.prototype.eat=function() {
console.log(this.name + "正在吃饭");
} function Student(name, age, className) {
this.className = className;
Person.call(this,[name,age]);//实现继承属性
}
//学生继承人的特性
Student.prototype = Object.create(Person.prototype);
//实现子类自定义扩展方法
Student.prototype.doHomework=function() {
console.log(this.name + "正在做作业");
}
window.onload=function() {
//创建一个人
var person = new Person("小明", 12);
person.eat();//人正在吃饭 //创建一个学生
var stu = new Student("小胖", 12, "一年级");
stu.eat();
stu.doHomework();
}

输出一下 我们可以看到 学生通过原型继承了人吃饭的特性

function Person(name, age) {

this.name = name;
this.age = age;
}
我们知道Person也是一个对象(函数对象),并且这个对象拥有一个prototype属性 并且这个属性等于new person();一个空对象(这个构造的空对象的_proto_并没有_proto_ 所以当找到这一级 就到了原型链顶端 )
后来我们在这个空对象上添加了一个eat函数
Person.prototype.eat=function(){...}
为什么通过new Person()构造的对象能使用这个函数呢
因为我们通过函数构造一个对象 这个对象的_proto_属性就指向了构造他函数的prototype对象
类似
var obje=new Person()
obje._proto_=Person.prototype;
当我们使用obje.eat()调用函数的时候 会在当前对象的成员里面找 很遗憾 没有找到
那么通过对象的_proto_原型链条 向上找 这个时候我们在prototype找到eat方法 那么就eat.call(this)调用
如果没有找到 在通过prototype对象的_proto向上找 最终找到_proto_=new Object();在Obje对象 找eat方法 没有找到 那么再向下Object的 发现_proto_为null 还没有找到则报错

如下图

自己对js对原型链的理解的更多相关文章

  1. 前端基本知识(二):JS的原型链的理解

    之前一直对于前端的基本知识不是了解很详细,基本功不扎实,但是前端开发中的基本知识才是以后职业发展的根基,虽然自己总是以一种实践是检验真理的唯一标准,写代码实践项目才是唯一,但是经常遇到知道怎么去解决这 ...

  2. JS中原型链的理解

    new操作符具体干了什么呢?其实很简单,就干了三件事情. var obj = {}; obj.__proto__ = Base.prototype; Base.call(obj); 第一行,我们创建了 ...

  3. 关于js中原型链的理解

    我们创建的每个函数都有一个prototype(原型)属性,这个属性是一个指针,一个对象.无论什么时候,我们只要创建一个新函数,就会根据一组特定的规则为该函数创建一个prototype属性,这个属性对象 ...

  4. 谈谈我对 js原型链的理解

    想要学习 “原型链” 必须要认识什么是 “原型” 和 “原型链” 先理解一下普通的继承和原型的区别,下面写一段js代码来帮助理解: var Animal = function(){ // 动物抽象类 ...

  5. 怎么理解js的原型链继承?

    前言 了解java等面向对象语言的童鞋应该知道.面向对象的三大特性就是:封装,继承,多态. 今天,我们就来聊一聊继承.但是,注意,我们现在说的是js的继承. 在js的es6语法出来之前,我们想实现js ...

  6. 前端基本知识(二):JS的原始链的理解

    之前一直对于前端的基本知识不是了解很详细,基本功不扎实,但是前端开发中的基本知识才是以后职业发展的根基,虽然自己总是以一种实践是检验真理的唯一标准,写代码实践项目才是唯一,但是经常遇到知道怎么去解决这 ...

  7. js javascript 原型链详解

    看了许多大神的博文,才少许明白了js 中原型链的概念,下面给大家浅谈一下,顺便也是为了巩固自己 首先看原型链之前先来了解一下new关键字的作用,在许多高级语言中,new是必不可少的关键字,其作用是为了 ...

  8. javascript原型与原型链个人理解

    想了解原型和原型链,我觉得首先我们得知道javascript里有一个Object 与 Function,它俩都是构造函数,当然函数也是一个对象.我们打印Object 与 Function看一下, co ...

  9. 关于JS中原型链中的prototype与_proto_的个人理解与详细总结

    一直认为原型链太过复杂,尤其看过某图后被绕晕了一整子,今天清理硬盘空间(渣电脑),偶然又看到这图,勾起了点回忆,于是索性复习一下原型链相关的内容,表达能力欠缺逻辑混乱别见怪(为了防止新人__(此处指我 ...

随机推荐

  1. Struts2入门(二)——配置拦截器

    一.前言 之前便了解过,Struts 2的核心控制器是一个Filter过滤器,负责拦截所有的用户请求,当用户请求发送过来时,会去检测struts.xml是否存在这个action,如果存在,服务器便会自 ...

  2. elasticsearch高级配置二----线程池设置

    一个Elasticsearch节点会有多个线程池,但重要的是下面四个: 索引(index):主要是索引数据和删除数据操作(默认是cached类型) 搜索(search):主要是获取,统计和搜索操作(默 ...

  3. Linux2.6内核协议栈系列--TCP协议1.发送

    在介绍tcp发送函数之前得先介绍很关键的一个结构sk_buff,在linux中,sk_buff结构代表了一个报文: 然后见发送函数源码,这里不关注硬件支持的分散-聚集: /* sendmsg系统调用在 ...

  4. java socket传送一个结构体给用C++编写的服务器解析的问题

    另一端是Java写客户端程序,两者之间需要通信.c++/c接收和发送的都是结构体,而Java是直接发送的字节流或者byte 数组.解决方法:c++/c socket 在发送结构体的时候其实发送的也是字 ...

  5. Appfuse:记录操作日志

    appfuse的数据维护操作都发生在***form页面,与之对应的是***FormController,在Controller中处理数据的操作是onSubmit方法,既然所有的操作都通过onSubmi ...

  6. 在项目中使用ExtJS

    主要目录文件介绍 builds:压缩后的ExtJS代码,体积更小,更快:docs:开发文档:examples:官方演示示例:locale:多国语言资源文件:pkgs:ExtJS各部分功能的打包文件:r ...

  7. mysql操作入门基础之对数据库和表的增删改查

    一.数据库管理-- 1.登陆数据库 mysql -u root -p; -- 2.查看数据库服务器所有数据库 SHOW DATABASES; -- 3.创建数据库 CREATE DATABASE My ...

  8. SQLite使用(三)&&核心API使用

    概述     SQLite提供了一系列接口供用户访问数据库,主要包括连接数据库,处理SQL,迭代查询结果等.本文会针对我们使用SQLite的主要场景,列出核心的API,详细介绍API的用法并给出代码用 ...

  9. SQL语句中的where 1=1 和0=1

    摘自:http://blog.sina.com.cn/s/blog_afe616ab0101camd.html SQL where 1=1 和0=1的作用 where 1=1; 这个条件始终为True ...

  10. Shell教程

    http://www.reddragonfly.org/abscn/index.html