关于JS的原型与继承笔记
1.什么是原型?
原型就是公用的方法或者属性。
	1.prototype本质上还是一个JavaScript对象;
	2.每个函数都有一个默认的属性prototype,而这个prototype的constructor默认指向这个函数	
	3.通过prototype我们可以扩展Javascript的内建对象;
	原型的属性和方法是被共享的
	只要原型上的属性或者方法被改了, 实例上的也会发生改变;
2.prototype与constructor
其实在JS中构造器就是函数,函数就是构造器,对象实例就是通过var obj=new 函数();这种形式新建出来的实例。
区别这些,在说prototype和constructor。从上面的英文中可以看出,prototype是个对象,里面定义了一个constructor,
那么我们可以推论出,constructor是对象实例的属性!而不是函数(构造器)的属性。
反过来,prototype是函数(构造器)的属性,而不是实例的属性!
constructor始终指向创建当前对象的构造函数,即 构造函数.prototype.constructor
每个函数都有一个默认的属性prototype,而这个prototype的constructor默认指向这个函数
代码例子:
function Duck( name ,word) {
            this.name = name;
            this.word = word;
        };
        Duck.prototype.say = function() { //这里的say方法是实例的方法  Duck.say是无法访问的,必须是Duck的实例对象才可以访问  例如下面的duck;
            console.log( this.name+" say : " + this.word )
        };
        Duck.run = function(){        //类方法   可以直接通过Duck.run访问,但是实例对象duck无法访问;
            console.log("T can run at a good pace");
        }
      function Person(name){   //这里的this代表的是Person类的实例  所以Person.desc,Person.name,Person.eat都是undefined;必须要new Person实例,通过实例才可以访问 例如下面的p;
        this.desc='测试类';
        this.name=name;
        this.eat = function(){
            console.log(this.name);
        }
        Person.prototype.sleep = function(){    //eat,sleep均是实例对象的方法,区别是:写在prototype上的sleep只需要实例化一次,其他实例可以共享,
                                                //而eat方法在每个对象实例化的时候都会执行,从而加大了内存空间;
                console.log("sleep");
        }
      }
      var duck = new Duck("nono","hehe");
      var p= new Person('zhangsan');
      var p2 = new Person('lisi');
      console.log(p.eat===p2.eat);//false
      console.log(p.sleep===p2.sleep);//true
      alert(p.constructor);//constructor始终指向创建当前对象的构造函数  即构造函数.prototype.constructor       这里输出Person构造函数的全部内容
     alert(Person.prototype.constructor)//输出Person构造函数全部内容   即每个函数都有一个默认的属性prototype,而这个prototype的constructor默认指向这个函数
关于JS的原型与继承笔记的更多相关文章
- JS中原型链继承
		当我们通过构造函数A来实现一项功能的时候,而构造函数B中需要用到构造函数A中的属性或者方法,如果我们对B中的属性或者方法进行重写就会出现冗杂的代码,同时写出来也很是麻烦.而在js中每个函数都有个原型, ... 
- [js]js中原型的继承
		js继承01 思路: 单例/工厂/构造函数--演进到原型 搞清原型结构 原型继承 模拟系统原型继承 实现自己的继承 观察原型继承特点 演进到原型链这一步 //单例模式: 防止变量名冲突: // 思路: ... 
- 怎么理解js的原型链继承?
		前言 了解java等面向对象语言的童鞋应该知道.面向对象的三大特性就是:封装,继承,多态. 今天,我们就来聊一聊继承.但是,注意,我们现在说的是js的继承. 在js的es6语法出来之前,我们想实现js ... 
- js重点--原型链继承详解
		上篇说过了关于原型链继承的问题,这篇详解一下. 1. function animals(){ this.type = "animals"; } animals.prototype. ... 
- JS的原型和继承
		__proto__除null和undefined,JS中的所有数据类型都有这个属性: 它表示当我们访问一个对象的某个属性时,如果该对象自身不存在该属性, 就从它的__proto__属性上继续查找,以此 ... 
- 破解 JS(原型)继承
		总体分为四大类:利用空对象作为中介继承.Object.create 继承.setPrototypeOf 继承.拷贝继承 function Animal(name, age) { this.name = ... 
- 8条规则图解JavaScript原型链继承原理
		原形链是JS难点之一,而且很多书都喜欢用一大堆的文字解释给你听什么什么是原型链,就算有图配上讲解,有的图也是点到为止,很难让人不产生疑惑. 我们先来看一段程序,友情提示sublimeText看更爽: ... 
- js中的原型、继承的一些想法
		最近看到一个别人写的js类库,突然对js中的原型及继承产生了一些想法,之前也看过其中的一些内容,但是总不是很清晰,这几天利用空闲时间,对这块理解了一下,感觉还是有不通之处,思路上没那么条理,仅作为分享 ... 
- js最好的继承机制:用对象冒充继承构造函数的属性,用原型prototype继承对象的方法。
		js最好的继承机制:用对象冒充继承构造函数的属性,用原型prototype继承对象的方法. function ClassA(sColor) { this.color = sColor; } Class ... 
随机推荐
- Codeforces Round #524 (Div. 2) F
			题解: 首先这个东西因为强制在线区间查询 所以外面得套线段树了 然后考虑几条线段怎么判定 我们只需要按照右端点排序,然后查询的时候查找最右节点的前缀最大值就可以了 然后怎么合并子区间信息呢 (刚开始我 ... 
- Python面向对象之魔术方法
			__str__ 改变对象的字符串显示.可以理解为使用print函数打印一个对象时,会自动调用对象的__str__方法 class Student: def __init__(self, name, a ... 
- macOS上实现Qt应用程序做文件关联打开
			一.背景介绍 用Qt开发的应用程序要实现文件关联,双击时用默认关联的程序打开文件,在Windows上这个功能非常容易实现.Windows应用程序在安装的时候可以在注册表中写入相关的键值对.打开文件的时 ... 
- Mybatis与JDBC批量插入MySQL数据库性能测试及解决方案
			转自http://www.cnblogs.com/fnz0/p/5713102.html 不知道自己什么时候才有这种钻研精神- -. 1 背景 系统中需要批量生成单据数据到数据库表,所以采用 ... 
- css 制作圆角、圆形图形布局
			<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ... 
- jmeter基本组成原件介绍
			jmeter基本组成原件介绍 参考地址:https://wenku.baidu.com/view/d4986ca2aaea998fcc220ec1.html 从性能工具的原理划分: Jmeter工具和 ... 
- 10_ for 练习 _ is Prime Number ?
			<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ... 
- Promise 用法
			Promise是一个构造函数,自己身上有all.reject.resolve这几个眼熟的方法,原型上有then.catch等同样很眼熟的方法. 那就new一个 Promise的构造函数接收一个参数,是 ... 
- 转载Alpine基础
			2018-08-06 基础镜像 FROM alpine:latest 国内可用镜像地址 官方镜像列表:http://rsync.alpinelinux.org/alpine/MIRRORS.txt 镜 ... 
- C博客作业01--分支,顺序结构
			本章学习总结(2分) 1.1思维导图 1.2本章学习体会及代码量学习体会 1.2.1学习体会 本周初次接触C语言,一开始难度较大,很多代码都看不懂,书里面的章节要看很多遍.开始编写代码时也遇到很多困难 ... 
