JS——Prototype模式

57-原型prototype,_ _proto_ _,isPrototype Of(),hasOwnProperty(),JavaScript中in操作符,混合模式 属性值是一个对象(属性的集合),默认的只有一个constructor属性,指向这个函数本身,原型是一个对象,其他对象 可以通过他实现属性继承。2.1如果当前实例化对象身上已经拥有实例属性,那么就找自身的属性,否则去找构建出来当前实例化对象的构造函数身上的原型属性。2.原型上的所有内容可以被实例共享 ,默认的指针指向的是原本的构造函数。实例化对象身上的属性,指向构造出来当前实例化对象的构造函数身上的原型。如果想访问原型中属性,那么就把实例属性删除掉就可以。(在实例身上时的属性) 阅读详情

"四人组"称Prototype模式为一种基于现有对象模板,通过克隆方式创建对象的模式。

我们可以认为Prototype模式是基于原型继承的模式,可以在其中创建对象,作为其他对象的原型。prototype对象本身实际上是用构造函数创建每个对象的蓝图。如果所有构造函数的原型包含一个名为name的属性,那么由同样的构造函数创建的每个对象也会有同样的属性。

模式图:


注:仅是创建现有功能对象的拷贝。

使用prototype模式的其中一个好处是,我们获得的是JS其本身所具有的原型优势,而不是试图模仿其他语言的特性。

S5 那些有趣的、真正的原型继承要求使用Object.create。Object.create创建一个对象,拥有指定对象和可选的属性。下面是示例:

var myCar = {

			name: "Ford Escort",

			drive: function() {
				console.log("driving");
			},

			panic: function() {
				console.log("panic");
			}
		};

		var yourCar = Object.create(myCar);
		//输出:Ford Escort
		console.log(yourCar.name);

和现实中的各种原型的作用差不多

Object.create还允许我们轻松实现差异继承等高级概念,通过差异继承,对象可以直接继承自其他对象。Object.create允许我们使用第二个提供的参数来初始化对象属性。例如:

var myCar = {

			name: "Ford Escort",

			drive: function() {
				console.log("driving");
			},

			panic: function() {
				console.log("panic");
			}
		};

		var yourCar = Object.create(myCar, {

			"id": {
				value : 1111,
				enumerable : true
			}
		});
		//输出:Ford Escort
		console.log(yourCar.name);
		//输出:1111
		console.log(yourCar.id);

如果希望在不直接使用Object.create的情况下实现Prototype模式,可以用如下实现:

var vehiclePrototype = {   //一层
			init: function(carModel) {
				this.model = carModel;
			},

			getModel: function() {
				console.log("The model of this vechicle is.." + this.model);
			}
		};

		function vehicle(model) { //二层

			function F() {};
			F.prototype = vehiclePrototype;

			var f = new F();
			f.init(model);
			return f;
		}

		var car = vehicle("Ford Escort");
		car.getModel();

最后一个可供选择的Prototype模式实现可以是这样的:

var beget = (function() {  //用了Model模式

			function F() {}
			return function(proto) {
				F.prototype = proto;
				return new F();
			};
		})();

我们可以从vehicle函数引出这个方法。请注意,这里的vehicle模仿了一个构造函数,因为Prototype模式不包含任何初始化的概念,而不仅是将对象链接至原型。


摘录于:《Javascript设计模式》

UWB定位进阶:如何利用DW1000的CIR数据做NLOS信号识别? 本文深入探讨了如何利用DW1000芯片的信道脉冲响应(CIR)数据进行非视距(NLOS)信号识别,以提升UWB定位精度。通过分析CIR数据的核心价值、预处理方法、特征提取技术以及机器学习模型构建,为研究人员和工程师提供了实用的解决方案,帮助克服室内定位中的NLOS挑战。 阅读详情

相关推荐

强化学习赋能宇树机器狗:Isaac Gym与MuJoCo仿真训练全解析

本文详细解析了如何利用Isaac Gym和MuJoCo两大仿真平台为宇树机器狗构建强化学习训练管道。内容涵盖环境配置、模型导入、PPO算法框架设计、奖励函数构建以及从仿真到实机的策略迁移技巧,为开发者提供了一套完整的宇树狗仿真训练实践方案。

zeta9的博客 621

JavaScript对象模型-执行模型

数据类型 基本数据类型 基本数据类型是JS语言最底层的实现。 简单数值类型: 有Undefined, Null, Boolean, Number和String。注意,描述中的英文单词在这里仅指数据类型的名称,并不特指JS的全局对象N an, Boolean, Number, String等,它们在概念上的区别是比较大的。 对象: 一个无序属性的集合,这些属性的值为简单数值类型、对象或者函数...

weixin_34029680的博客 278

A Mathematical Framework for Transformer Circuits—(二)

transformer数学理论框架

qq_42208244的博客 758

关于JS中的prototype介绍

转自:微点阅读 https://www.weidianyuedu.comJS中的phototype是JS中比较难理解的一个部分本文基于下面几个知识点:1 原型法设计模式在.Net中可以使用clone()来实现原型法原型法的主要思想是,现在有1个类A,我想要创建一个类B,这个类是以A为原型的,并且能进行扩展。我们称B的原型为A。2 javascript的方法可以分为三类:a 类方法b 对象方法c 原型方法例子:function People(name){this.name=name;//对象方法this.I

xiaoweids的博客 3046

CST新手必看:共面波导色散曲线绘制全流程(附参数设置避坑指南)

本文详细介绍了CST Microwave Studio中绘制共面波导色散曲线的全流程操作,特别针对新手常见的边界条件设置错误、参数扫描失效等问题提供解决方案。通过模型建立、边界条件设置、本征模求解器配置等步骤,帮助工程师快速掌握CPW色散特性分析方法,并附有参数设置避坑指南,提升高频电路设计效率。

tomato的博客 990

RISC-V内核移植实战:从零开始手把手实现RT-Thread上下文切换(附GD32VF103代码解析)

本文详细解析了在RISC-V架构上移植RT-Thread实时操作系统的核心步骤,重点聚焦于上下文切换机制的实现。通过对比ARM Cortex-M与RISC-V在中断处理和寄存器管理上的关键差异,并以GD32VF103开发板为例,手把手指导开发者完成libcpu抽象层适配、线程栈初始化以及三种上下文切换方式的代码编写与调试,为嵌入式开发者从ARM转向RISC-V平台提供了实战指南。

fern8的博客 740

Node.js 中妙用 Module.prototype._compile 函数

在上篇文章 Nodejs 模块机制及源码分析 中,通过分析 Nodejs 中模块的加载源码,基本理解了 NodeJs 的模块加载原理,其中 Module.prototype._compile 函数主要用于对于第三方 js 文件进行编译加载,所以我们可以巧妙的在 Module.prototype._compile 运行前后执行一些自己的代码,就能实现出意向不到的效果。 最近在看赵坤大神的 《Node...

zdplife的专栏 1679

UniApp X 网络请求避坑指南:从 JS 到 UTS 的 JSON 数据处理全解析

摘要:UniAppX开发中处理JSON数据时,UTS强类型特性要求开发者改变JS习惯。本文对比两种主流方案:1)UTSJSONObject通过keypath访问数据,兼容JS但缺乏类型提示;2)type+泛型方案,通过定义数据类型实现强类型校验和智能提示,推荐用于固定数据结构。文章详细演示了两种方式的具体实现、转换方法及实战案例,并提供了类型定义技巧和注意事项,帮助开发者编写更稳定高效的跨平台应用。

归梦工作室 2790

javascript的原型

 函数:原型每一个构造函数都有一个属性叫做原型(prototype,下面都不再翻译,使用其原文)。这个属性非常有用:为一个特定类声明通用的变量或者函数。prototype的定义你不需要显式地声明一个prototype属性,因为在每一个构造函数中都有它的存在。你可以看看下面的例子:Example PT1CODE:function Test(){}alert(Test.prot

技术收藏 812

PyTorch深度学习实战(6)——神经网络性能优化技术

神经网络性能优化技术是指通过改进神经网络的结构、参数初始化、正则化和训练过程等方面来提高其性能和泛化能力的方法。优化技术的选择和调试需要根据具体问题进行,通过不断实验和调整,找到最适合网络的优化策略。本节首先训练了一个简单的全连接网络,然后在此基础上介绍了简单有效的神经网络性能提升技巧。

盼小辉丶的博客 1万+

【气候极端指数】MATLAB计算各种气候极端指数

简介各类气候极端指数,及其MATLAB计算代码

WW、forever的博客 4917

js优化-prototype原型的使用

var builder = function (id) { this.init($(id)); this.forms = []; /* this.init = function () //写在内部,每个实例都会分配一个function,如果又存在大量的DOM存取,操作开销就大了. { var $row = $("").appendTo($(id).addClas

生面别开 2094

[23]-->变长SPI接口

然而,FPGA技术复杂,学习门槛较高,许多人(初学者或学生)在学习过程中面临诸多挑战。(1)模式0:SCK串行时钟线空闲是为低电平,数据在SCK时钟的上升沿被采样,数据在SCK时钟的下降沿切换,CPOL= 0,CPHA=0;(2)模式1:SCK串行时钟线空闲是为低电平,数据在SCK时钟的下降沿被采样,数据在SCK时钟的上升沿切换,CPOL= 0,CPHA=1;(3)模式3:SCK串行时钟线空闲是为高电平,数据在SCK时钟的上升沿被采样,数据在SCK时钟的下降沿切换,CPOL= 1,CPHA=1;

m0_46498597的博客 178

js 原型模式 原型prototype 正解

js 原型模式 原型prototype 正解 这是一本值得看的书 去我的资源里面下载吧 免积分

JustLoveWindowsPhone的专栏 308

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

关于js继承中"prototype模式"的constructor重定向浅析

近来在看阮一峰的网络日志,确实写得好,非常通俗易懂,对我们这些小白受益匪浅! JavaScript的继承一直是一大难点,初涉会花费非常多的时间,我也如此。在摸索了许多天之后,逐渐有了一些头绪。 但是关于constructor属性重定向这个问题上,我还是存在疑问。 在测试过程中,发现测试的结果与阮一峰老师的结论有些出入,在此记录。 首先粘上阮一峰老师的这篇博文:http://www.ruan

Loliner`s Blog 1730

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

javascript模式——Prototype模式

GoF权威的解释是,原型模式是一种通过对一个对象的克隆,创建基于这个对象的多种对象的模式。 为了实现这种原型模式,可以直接使用ECMAScript 5 中的方法Object.create。它不紧可以创建出对特定对象的扩展出的对象,还可以增加新属性。 var vehicle = { getModel: function () { console.log( "The model...

weixin_30477797的博客 102

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

javascript运用Prototype模式

javascript开发人员对prototype这个东西恐怕都十分熟悉了,可是对于prototype模式了解的人恐怕不是很多。原型模式的用意是:通过给出一个原型对象来指明所要创建的对象类型,然后用复制这个原型对象的办法创建出更多的同类型对象。和其他创建型模式不同:prototype模式创建对象不是通过new一个类,而是通过一个现有的对象实例来的。有经验的编程人员应该都接触过对象的clone方法,这...

weixin_33877092的博客 62

JS中prototype出现的理由?原型模式是怎么演变而来的?

首先我们知道创建对象的三种模式:工厂模式、构造函数模式、原型模式;(它们是递进关系的) 1. 工厂模式 这种模式解决了创建多个相似对象的问题,但是这种模式却无法识别创建出来的对象是属于那种类型的,都属于Object ?function createPerson(name, obj, job) { var o = new Object(); o.name = name; o.obj = obj; o.job =

weixin_41993254的博客 279

javascript 面向对象编程-prototype+json模式

js在初学者看来有点面向过程感觉,写function,操纵页面DOM元素,这估计是吸引人最先接触和使用js的亮点。 但是,js从设计上来说,完全是面向对象的! 只是这种对象有别于传统的Java,C++中的对象,我对js对象概念的理解是, [color=red][b]js中的对象更像是一个集合,存储属性和方法的集合[/b][/color] js里一切皆对象,function本身也是对象,js...

blue2048 138

Javascript中的的对象——原型模式(Prototype)

本文原文来源:《Object-Oriented JavaScript》By Stoyan Stefanov本文翻译来源:赤石俊哉 原创翻译版权申明: 如果您是原文的原作者并且不希望此文被公开,可以联系作者删除。本文翻译由 赤石俊哉 翻译整理,您可以用于学习交流的目的,但是禁止用于其他用途,因私自滥用引发的版权纠纷本人概不负责。 原型模式(...

weixin_34150503的博客 127

JS-[工厂模式&构造函数&prototype]

JS-工厂模式&构造函数&prototype 工厂模式 自定义构造函数 工厂模式和构造函数的区别 protorype的使用 声明未声明属性 动态声明方法 工厂模式 通过一个函数(工厂函数)来创建对象 function createPerson(name,age){ var obj={ name:...

weixin_30920513的博客 123

js的prototype原型设计模式

1.js对象的继承方式使用prototype原型模式。 2.js的方法可以分为以下三类: a.类方法 b.对象方法 c.原型方法 [code="js"] function People(name) { this.name=name; //对象方法 this.Introduce=function(){ alert("My name is "+this.n...

a_Little_pumpkin的博客 230

JavaScript设计模式之原型模式(Prototype Pattern)

Gof中对原型模式的解释是基于一个存在对象(模板),通过克隆的方式来创建新对象。 我们知道在JS中没有Class的抽象,一切皆对象,而实际上,JS中存在另一个重要的抽象 Type和Prototype。 照葫芦画瓢,葫芦就是原型,瓢就是Type。这本身就是原型模式的真正体现。 在JS里,ECMAScript 5 standard已经很好的实现了原型模式,通过一个简单的Object.cr

爱我你就抱抱我 1172

JavaScript 面向对象 (prototype 原型模式)

一、 JavaScript 设计思想   1994年,网景公司(Netscape)发布了Navigator浏览器0.9版。这是历史上第一个比较成熟的网络浏览器,轰动一时。但是,这个版本的浏览器只能用来浏览,不具备与访问者互动的能力。比如,如果网页上有一栏"用户名"要求填写,浏览器就无法判断访问者是否真的填写了,只有让服务器端判断。如果没有填写,服务器端就返回错误,要求用户重新填写,这太...

149

[JS设计模式]Prototype Pattern

Prototype pattern可便于同类型的多个对象共享属性。原型(prototype)是JS原生的对象,其他对象可以通过原型链(prototype chain)来访问原型。单独看这句描述可能还是有点儿抽象,下面通过具体的示例来详细阐述。这里可以看到,有一个name属性;根据ES6类的语法规则,所有在类中定义的属性(本例的属性bark),都自动加入到类的prototype中,Dog类本身有两个属性:constructor和bark。有两种方式可以查看,一种是通过类本身的prototype。

渔道的博客 621

JavaScript构造函数模式+prototype(原型)模式拓展系统类和自定义类

一。JavaScript构造函数模式+prototype(原型)模式拓展系统类和自定义类 //定义Person类或者Person构造函数,js中类和构造函数是同一个概念         function Person(name,age){             this.name = name;             this.age  = age;         };

qq_29817411的博客 742
上一篇: 设计模式原则
下一篇: JS Facade(外观)模式
spfLinux
博客等级 码龄10年 117粉丝 307原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值