关于js的对象原型继承(二)

本章讨论使用new一个构造函数来创建一个对象。

前期知识点说明:

1、prototype是函数的一个属性,每个函数都有一个prototype属性。这个属性是一个指针,指向一个对象。它是显示修改对象的原型的属性。

2、__proto__是一个对象拥有的内置属性(请注意:prototype是函数的内置属性,__proto__是对象的内置属性),是JS内部使用寻找原型链的属性。

首先上代码:

//构造函数
function Cat(name) {
    this.name=name||‘某只猫‘;
    this.say=function(){return `Hello, ${this.name}!`;};
}

var kitty = new Cat(‘Kitty‘);

kitty对象是使用Cat构造函数创建的一个对象。

使用new创建对象可以分作两个步骤:

1、通过 Cat构造函数中的属性和方法(this后面的) 去 创建一个对象。也就是说,创建的这个对象包含Cat构造函数中的属性和方法(this后面的)。

2、将 新创建的对象的__proto__指向Cat.prototype(因为Cat是一个函数)。如果Cat.prototype没有申明其他的属性和方法的话,Cat.prototype中只有一个constructor和它自身的__proto__属性(因为Cat.prototype也是一个对象),这个constructor属性就指向这个Cat构造函数(因为只有函数才有prototype属性,从变量监视器里面可以看到,如下图)。

具体的关系如下图:

时间: 2024-12-19 12:36:28

关于js的对象原型继承(二)的相关文章

关于js的对象原型继承

javascript中,对象的继承是通过原型去继承. 可以这样理解:js中的对象,包含的除了属性和方法,还有一个最基本的原型__proto__对象.这个原型__proto__指向谁,这个对象就继承谁.这是最容易理解对象原型继承的一种方式. 如下面的代码: var student={ name:'zhangsan', age:21, run:function(){ return this.name+' is running!'; } }; var xiaoming={ name:'xiaoming

node.js javascript理解原型继承

util.inherits util.inherits(constructor, superConstructor)是一个实现对象间原型继承的函数. JavaScript 的面向对象特性是基于原型的,与常见的基于类的不同.JavaScript 没有提供对象继承的语言级别特性,而是通过原型复制来实现的 var util = require('util'); function Base() { this.name = 'base'; this.base = 1991; this.sayHello =

关于对象+原型+继承(二)

每个Javascript对象都包含着对一个原型对象的内部引用.原型对象的任何属性,都表现为每个以它为原型的方法的属性.也就是说,javascript对象可以从它的原型那里继承属性. prototype实现原理 所有的对象都可以有prototype, prototype自己也是对象,那么他也可以有prototype,这样循环下去就形成了一个prototype链, 这个链当他遇到链中队形的prototype是null时中止.(Object的默认的prototype是null) . 1 var obj

js方法和原型继承(一)

在js语言规范中并不存在方法这一概念,方便起见,将作为对象属性的函数成为方法this引用的规则a.在最外层代码中,this引用的是全局对象b.在函数内,this引用根据函数调用方式不同而不同函数内部的this引用 见下表 函数的调用方式 this引用的引用对象 构造函数调用 所生成的对象 方法调用 接收方对象 apply或call调用 由apply或call的参数指定的对象 其它方式调用 全局对象 接收方对象是这样一种对象通过点运算符或者中括号运算符调用对象方法时,在运算符左侧所指定的对象下面是

js 构造函数、原型继承

//定义所有飞行物的父类型的构造函数 function Flyer(fname,fspeed){ this.fname=fname; this.fspeed=fspeed; } Flyer.prototype.fly=function(){ //fly放在Flyer.prototype console.log(this.fname+"以"+this.fspeed+"速度飞行"); } //定义第一种飞行物: Bee,继承并扩展父类型Flyer //定义独有的构造函数

JS中的原型继承机制

转载 http://blog.csdn.net/niuyongjie/article/details/4810835 在学习JS的面向对象过程中,一直对constructor与prototype感到很迷惑,看了一些博客与书籍,觉得自己弄明白了,现在记录如下: 我们都知道,在JS中有一个function的东西.一般人们叫它函数.比如下面的代码 js代码: [javascript] view plaincopy function Person(name) { alert(name); } Perso

JS中的原型继承和多重继承

概念:1原型继承是创建新类型对象----子类型,子类型基于父类型,子类型拥有父类型所有的属性和方法(从父类型继承得到),然后修改其中的部分内容或者添加新的内容.继承最好在子类型模型可以被视为父类型对象的时候使用.   2从多个父类型中派生出一个对象类型称为多重继承. 原型继承: 使用new关键字和构造函数的prototype属性都是定义类型的特定方式,这些是我们到目前为止一直使用的,对于简单的对象,这种方式还是很好的,但是当程序过度使用继承时,这种创建对象的方法很快就显得笨拙了.所以增加一些函数

关于对象+原型+继承(一)

看下面例子: 1 var a={ 2 x:2, 3 getNumber:function(z){ 4 return this.x+this.y+z; 5 } 6 } ; 7 8 9 var b={ 10 y:23, 11 __proto__:a; 12 //表示对象b继承至对象a;__proto__属性为为对象自身隐含属性 13 } ; 14 15 b.getNumber(4);//输出29 如果调用ES5标准化的实现原型继承的可选方法  var b=Object.create(a);//对象b

js 封装类实现原型继承

实现原理:定义一个封装函数extend:该函数有2个参数,Child代表子类,Parent代表父类:在函数内,先定义一个空函数F, 用来实现功能中转,设置F的原型为父类的原型,然后把空函数的实例传递给子类的原型,使用空函数的好处:避免直接实例化父类可能会带来系统性能问题,比如父类的实例很大的话,实例化会占用很多内存: function extend(Child,Parent) {    //Child表示子类,Parent表示父类    // 首先定义一个空函数   var F = functi