prototype的本质

prototype的本质

原型的本质就是一种委托关系。
即我这里没有,就到我的原型里去看看,一旦找到就当成我的用。

var girl = {
name: ‘小美‘
};
var boy = {
name: ‘小帅‘,
pay: function() {
console.log(‘花了一千元‘);
}
};
Object.setPrototypeOf(girl, boy);
girl.pay();

程序中指明了girl的原型是boy,girl没pay方法,但是boy有,所以boy花钱了。
从这个例子来看那么,原型是一种委托关系,如果说是一种继承关系就不是那么贴切。
因为这段代码更等价于如下的代码:

var girl = {
name: ‘小美‘,
pay: function() {
boy.pay();
}
};
var boy = {
name: ‘小帅‘,
pay: function() {
console.log(‘花了一千元‘);
}
};
girl.pay();

程序中指明了girl的原型是boy,girl没pay方法(腾云科技ty300.com),但是boy有,所以boy花钱了。
从这个例子来看那么,原型是一种委托关系,如果说是一种继承关系就不是那么贴切。
因为这段代码更等价于如下的代码:

var girl = {
name: ‘小美‘,
pay: function() {
boy.pay();
}
};
var boy = {
name: ‘小帅‘,
pay: function() {
console.log(‘花了一千元‘);
}
};
girl.pay();

稿源:勤快学QKXue.NET

阅读完整版prototype的本质

时间: 2024-11-07 18:22:44

prototype的本质的相关文章

简单理解js的prototype属性

在进入正文之前,我得先说说我认识js的prototype这个东西的曲折过程. 百度js的prototype的文章,先看看,W3School关于prototype的介绍: 你觉得这概念适合定义js的prototype这个东西吗?你是否也认为prototype是一个object对象的属性呢?是的话,请认真认真看我这篇文章,因为这篇文章会毁灭你的人生三观,呵呵,就是有这么严重,因为本人就是被这个定义给害惨的. 不得不说,看了网上的一些介绍prototype的文章,基本上都说prototype是对象的一

漫谈JS中的prototype

1. 引言 ??继承(inheritance).封装(encapsulation)和多态(polymorphism)是面向对象机制的主要特性.在JS中没有"class"的概念,自然也无法直接进行JAVA.C++常用到的extends.implements等操作.但从某种意义上来说,JS是纯粹的"面向对象"编程语言,因为JS中处处皆是对象(函数也是对象),而且作为函数式脚本语言,天生就是多态的.??网上很多文章探讨JS中如何设计class和面向对象机制,这些文章的思路

js对象体系总结

废话不多说,抛图一张... 总结: 所有的函数都有prototype属性. prototype属性本质上也是对象(实际上是Object的实例对象{ })----原型对象中也有一个__proto__属性,并且指向Object.prototype,但是Object.prototype中没有该属性. 原型对象中默认会有一个constructor属性,该属性指向原型所属的构造函数. 所有的函数都是Function的实例. Function也是自己的实例. 所有的实例对象中都有一个__proto__属性,

MDN——javascript——入门——第三章对象——对象.构造函数.原型链.继承——知识点总结

对象Object 由属性property(变量).方法method(函数)组成 var objectName = { member1Name : member1Value, member2Name : member2Value, member3Name : member3Value } member(成员)的值是任意的, 一个如上所示的对象被称之为对象的字面量(literal)——手动的写出对象的内容来创建一个对象.不同于从类实例化一个对象,我们会在后面学习这种方式. 访问对象成员 1.点表示法

实例对象、构造函数、原型之间的关系

实例对象.构造函数和原型之间的关系 实例对象 实例对象中只有__proto__属性,所有的实例都指向自己构造函数的原型.__proto__属性里面有构造器construction和__proto__. 构造器指向原型所属的构造函数,__proto__属性指向Object的原型. 实例对象里面有一个特例: 这个是一个特例,里面有prototype和__proto__俩个属性,__proto__指向Function的原型,prototype是一个单纯的对象,是一个Object的实例,相当于{},就是

关于原型链

1.所有的函数都是Function的实例对象 Function是函数,也是Function的实例对象 函数声明方式定义的函数都是实例对象 function foo(){ } foo.call(); var obj={ info:123, showInfo:function(){ console.log(this.info); } }; obj.showInfo(); console.log(foo.__proto__===Function.prototype); console.log(Func

【转】JavaScript面向对象

http://www.cnblogs.com/dolphinX/p/4385862.html 理解对象 对象这个词如雷贯耳,同样出名的一句话:XXX语言中一切皆为对象! 对象究竟是什么?什么叫面向对象编程? 对象(object),台湾译作物件,是面向对象(Object Oriented)中的术语,既表示客观世界问题空间(Namespace)中的某个具体的事物,又表示软件系统解空间中的基本元素. 在软件系统中,对象具有唯一的标识符,对象包括属性(Properties)和方法(Methods),属性

温故而知新--JavaScript书摘(一)

02/26 apply(参数为数组) . call (参数需一一列举).bind 三者都是用来改变函数的this对象的指向的:apply . call .bind 三者第一个参数都是this要指向的对象,也就是想指定的上下文:apply . call .bind 三者都可以利用后续参数传参:bind 是返回对应函数,便于稍后调用:apply .call 则是立即调用 . 02/27 匿名函数:在栈追踪中不显示有意义的函数名,难以调试,没有函数名不好引用自身,缺少了可读性和可理解性. 块级作用域:

JavaScript 原型与继承机制详解

引言 初识 JavaScript 对象的时候,我以为 JS 是没有继承这种说法的,虽说 JS 是一门面向对象语言,可是面向对象的一些特性在 JS 中并不存在(比如多态,不过严格来说也没有继承).这就困惑了我很长的时间,当我学习到 JS 原型的时候,我才发现了 JS 的新世界.本篇文章讲解了 JavaScript new 操作符与对象的关系.原型和对象关联(也就是俗称的继承)的原理,适合有一定基础的同学阅读. 一.JavaScript 的类与对象 许多书籍上都会说到如何在 JS 当中定义“类”,通