关于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默认指向这个函数
时间: 2024-10-18 00:58:33

关于JS的原型与继承笔记的相关文章

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

前言 了解java等面向对象语言的童鞋应该知道.面向对象的三大特性就是:封装,继承,多态. 今天,我们就来聊一聊继承.但是,注意,我们现在说的是js的继承. 在js的es6语法出来之前,我们想实现js的继承关系,需要借助于原型链.之前的文章,我有讲过原型和原型链的概念.在这,再重新回顾一下. js中万物皆对象,每个对象都有一个隐式原型 __proto__ ,指向创建它的构造函数的原型对象. 函数(构造函数)除了有一个隐式原型对象,还有一个属性prototype,它指向一个对象,这个对象就是原型对

破解 JS(原型)继承

总体分为四大类:利用空对象作为中介继承.Object.create 继承.setPrototypeOf 继承.拷贝继承 function Animal(name, age) { this.name = name; this.age = age; } Animal.prototype = { speak: function() { console.log('my name is ' + this.name); } } function Cat() { Animal.apply(this, argu

js之原型链&继承

首先来总结一下自己对原型链的的理解,直白的说就是 为实例对象查找方法属性提供一个桥梁,在原型链中,__proto__是至关重要的东西,上图: 继承,说白了就是继承父组件的属性,方法 继承属性可以使用Father.call(this,name,age,..)来实现 继承方法就不行了,得使用原型对象的查找机制 发不多说,上代码 function Father(uname,uage) { this.name = uname this.age = uage } Father.prototype.mone

JS基于原型的继承

function Person(name , age){ this.name = name; this.age = age;}Person.prototype.hi = function(){ console.log("hi my neame is "+this.name+" , I'm "+ this.age+" years old!");}Person.prototype.LEG_NUM = 2;Person.prototype.ARAMS_

8条规则图解JavaScript原型链继承原理

原形链是JS难点之一,而且很多书都喜欢用一大堆的文字解释给你听什么什么是原型链,就算有图配上讲解,有的图也是点到为止,很难让人不产生疑惑. 我们先来看一段程序,友情提示sublimeText看更爽: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edg

原型和继承 constructor、prototype、__proto__

之前大神说,学习 JS 遇到原型和继承果断的跳过吧,没有它们,你也可以把 JS 玩的很 6 突然入了坑,简单的记录一下 构造函数 实例对象 用来初始化新创建的对象的函数是构造函数. 在 C++ 语言中,类 有一个构造函数, 它与类同名且没有返回值的(可以不写,也可重载多个): 在 JS  中, 没有 类 的概念,原型对象 姑且等同于 类 ,原型对象有 constructor 属性,该属性指向原型对象的构造函数. JS 中默认存在的一些原型对象,也存在它们的构造函数,比如 Object() Arr

js中的原型、继承的一些想法

最近看到一个别人写的js类库,突然对js中的原型及继承产生了一些想法,之前也看过其中的一些内容,但是总不是很清晰,这几天利用空闲时间,对这块理解了一下,感觉还是有不通之处,思路上没那么条理,仅作为分享, 一.instanceof 在JavaScript有instanceof运算符,是二元运算符,使用方法 instanceA instanceof A,返回值是布尔值(boolean),含义是判断instanceA是否是A的一个实例,其实质是判断A.prototype===instanceA.__p

JS面向对象,原型,继承

ECMAScript有两种开发模式:1.函数式(过程化),2.面向对象(OOP).面向对象的语言有一个标志,那就是类的概念,而通过类可以创建任意多个具有相同属性和方法的对象.但是,ECMAScript没有类的概念,因此它的对象也与基于类的语言中的对象有所不同.var box = new Object();box.name = 'Lee';box.age = 100;box.run = function(){ return this.name + this.age + '运行中...'; //th

面向对象之笔记二——————原型与继承

原型与继承 原型 为什么需要原型? 构造器创建对象的时候, 实际上会有成员重复 如果使用 构造器 this.方法名 = function .... 方式创建对象. 那么每一个对象对应的方法就会重复 function Person( name ) { this.name = name; this.sayHello = function() { console.log( '你好,我是 ' + this.name ); }; } var p1 = new Person( 'Hello' ); var