js---圣杯模式 ,枚举,如何区分数组和对象,callee

【UVM实战】第七章:UVM中的寄存器模型(1)寄存器模型简介 寄存器模型简介~ 阅读详情

1. 继承发展史(从a发展到d)

a 原型链继承:过多的继承没有用的属性

function Grand(){this.grand='grand';this.name='haha'}
function Father(){this.father='father'}
function Son(){this.son='son'}
var grand = new Grand();
Father.prototype=grand;
var father = new Father();
Son.prototype=father;
var son = new Son();
console.log(son.son,son.father,son.grand);//son father garnd  可以看出来形成了原型链,但是我可能不想要grand身上的name却也继承了

b 借用构造函数---不能借用构造函数的原型,每次都要多调用一次函数。降低效率

function Father(){
    this.address=123;this.familyCount=3;
}
function Son(){
    Father.call(this);  //--->  this.address=123;this.familyCount=3;//重复 
    this.name='xiaoming'
}

c 公有原型---明显的缺陷:修改子,会影响父

function Father(){
   this.familyCount=3;
}
Father.prototype.address=123;
function Son(){
    this.name = 'xiaoming';
}
Son.prototype = Father.prototype;//现在Father和Son的原型都是Father.prototype那个房间里的东西,一动都变
var father = new Father();
var son = new Son();
console.log(son.address,father.address);//123 123
Son.prototype.address = 234;
console.log(son.address,father.address);//234 234  如果子搬出去住了,想改属性的值,或者给自己加了一个属性,父的也会变!!

d 圣杯模式---利用中间函数构造出的对象作为中间过度原型,产生原型链

function Father(){
   this.familyCount=3;
}
function Son(){
    this.name = 'xiaoming';
}
Father.prototype.address='haha';
//封装一个继承函数 闭包的形式可以使F隐起来,不被访问到---闭包的私有化变量的使用方法
var inherit = (function(){
    var F=function(){};
    return function(target,source){
       F.prototype = source.prototype; //将source的原型和F的原型变成同一个       
       target.prototype = new F();  //创建一个__proto__指向source.prototype的{},并让target构造出的对象都继承自这个{}
       //此时,修改target.prototype相当于是在这个空的{}中做修改,不会有任何影响
       target.prototype.constuctor = target;  //修改原型会导致原型失去自己构造函数的指向
       target.prototype.uber = source.prototype; //超类:记录真正继承的的原型
    };
})();
inherit(Son,Father);
var son=new Son();
console.log(son.address);//haha
2. 枚举---就是遍历
function Person(name,age){
    this.name=name;
    this.age=age;
}
Person.prototype.secret='每个人都不一样';
var obj = new Person('xiaozhang',24);
for(var key in obj){
  //过滤不是当前对象自己的属性
   if(obj.hasOwnProperty(key)){
       console.log(key+'是当前对象自己的','值是:'+obj[key]);//必须用obj[key],不能用obj.key
                                                   //因为用.取属性会让系统自动转换为obj['key'],就是说系统默认点后就是字符串形式
    }else{
    //为false----会打印出原型链上所有人为设置的属性,系统自带的不会打印出来!!
         console.log(key+'是继承来的');
    }
}
'name' in obj;//true
'secret' in obj;//true     in不论是当前对象里的还是原型链上的人为设置的属性都是返回true

3. A instanceof B----A对象的原型链上 有没有 B的原型 A对象是不是可以继承B的原型  A对象 是不是 由B函数构造出来的

例子---区分数组和对象:

var arr=[1,2],obj={};

//法一: 由谁构造的---可能会不靠谱
console.log(arr.constructor,obj.constructor); //function Array(){}   function Object(){}

//法二: instanceof  原理差不多,原型链上有没有Array  ---可能不靠谱
console.log(arr instanceof Array,obj instanceof Array); //true false

//法三: 调用Object的toString方法 建议使用这种方式,其他两种方式在父子域的情况下会出错,就iframe引入一个子页面,在子页面[] instanceof Array结果是false,因为这里的Array等于取了父域中的Array,跨域
console.log(Object.prototype.toString.call(arr),Object.prototype.toString.call(obj)); //[Object Array] [Object Object]

4. callee---属于arguments 的一个函数,就是自己

例子---立即执行函数没有名字,但是要写递归的时候:

var num=(function(n){  //没函数名
   if(n==1){return 1}
   return n*arguments.callee(n-1);//这里回调自己
}(5));
console.log(num);//120

5. 写个小栗子---this

var foo = 123;
function print(){
   this.foo = 234;
   console.log(foo);
}
new print();//this是{}---> this.foo=234---> {foo:234}---> 打印的是foo,不是this.foo---> foo是个变量,请在作用域链上找,只有全局有个foo是123
print(); //this是window ---> window.foo = 234 ---> 所以foo从123变成了234 



SIWAVE仿真PCB操作说明 使用SIWAVE进行PCB仿真提取S参数的操作 阅读详情

相关推荐

哨兵一号数据下载

哨兵1号数据的下载过程

weixin_59617499的博客 5135

继承、“圣杯模式“

一、继承的几种方法 1、传统形式——原型链 过多地继承了没用的属性 2、借用构造函数 不能继承

ohnk_的博客 1216

从入门到精通:dirmap 高级 Web 目录扫描实战指南

本文提供了一份从环境搭建到高级配置的dirmap Web目录扫描实战指南。详细解析了工具安装、核心配置文件dirmap.conf的深度调优,包括递归扫描、四种扫描模式(字典、爆破、爬虫、Fuzz)的实战应用,并演示了分阶段资产发现的完整工作流程,帮助安全人员高效发现隐藏目录与敏感文件。

rnn9storyteller的博客 481

js继承“圣杯模式”演变

继承,在面向对象的编程中用的还是非常多的,虽然面向对象因为其复杂的构建对象的初始化,在大多数的程序中并没用用到,但是我们使用过后才发现,这使得今后项目的扩展和维护更加容易。话不多说,进入正题。 1. 传统形式(原型链继承) //父类 Father.prototype.name = "Li" function Father() { this.age = 18 } //子类 Son.prototype = new Father() function Son() {} var son = new Son()

qq_33282279的博客 561

Coze智能体网页集成实战:从零搭建免登录AI助手

本文详细介绍了如何利用Coze Chat SDK从零开始为网站集成免登录AI助手。通过获取访问令牌和智能体ID,仅需几行JavaScript代码即可将功能完整的对话窗口嵌入网页,实现开箱即用的智能交互。文章重点讲解了核心部署步骤、会话隔离方案以及UI深度定制方法,帮助开发者快速打造贴合品牌、提升用户体验的网页AI助手。

gold8的专栏 558

VS Code配置Java开发环境避坑指南:从JDK到Spring Boot插件全流程

本文详细介绍了在VS Code中配置Java开发环境的完整流程,涵盖JDK选择、环境变量配置、核心插件安装、构建工具优化及Spring Boot项目专项设置。特别针对常见问题提供避坑方案,帮助开发者快速搭建高效稳定的开发环境,提升Java和Spring Boot开发效率。

weixin_28839699的博客 980

四种继承模式详解

本文介绍了继承模式的演变过程,原理及简单举例

Alice_czy的博客 623

计算文本相似度的常用算法

NLP、数据挖掘领域中,文本分析是一个很重要的领域,这有助于我们去让计算机理解语言的作用和使用。文本分析是数据挖掘的重要手段,利用文本分析,我们将很快的读取到一本书、一篇文章、一段话中的关键词和核心思想,而文本相似度就是我们用来剔除无用信息或者重复信息的重要手段,让计算机去找文本中的不同。 在生活中,信息检索、数据挖掘、机器翻译、文档复制检测等领域都应用到“文本相似度”。文本不仅仅是文字,文本相似度的应用更广,除了文字的匹配,还可以是图片、音频等,因为它们的实质都是在计算机中都是以二进制的方式存在的。相.

氧小氢的博客 2万+

js 圣杯模式

js 圣杯模式 圣杯模式存在的意义? 用来继承已有原型对象(A.prototype)中的成员(主要是公用方法),同时根据自己的需求修改原型对象(A.prototype)以定制符合我们要求的构造函数B,这个修改对已有的实例(a1,a2,…)不会产生影响 普通继承来共享变量 var Person = function () {}; Person.prototype.sayHell...

palmer_kai的博客 5901

基于深度学习的垃圾邮件识别

垃圾邮件的大量存在严重威胁着电子邮件系统的安全和效率。基于深度学习的垃圾邮件识别技术已经成为目前最有效的解决方案之一。本文将详细介绍使用深度学习技术进行垃圾邮件识别的方法,并提供相应的代码实现。 随着电子邮件的广泛应用,垃圾邮件的数量不断增加,传统的规则和统计方法已经无法满足对垃圾邮件进行准确识别的需求。深度学习技术以其强大的模式识别能力和自动特征提取能力成为解决垃圾邮件识别难题的有效工具。

一键难忘的博客 1093

PyCharm 怎么不升级直接使用Jupyter Notebook

在PyCharm 中需要升级到 PyCharm Professional 版本,才能直接使用 Jupyter Notebook。从截图来看,Jupyter Notebook 已经成功启动,并且正在运行。这将在默认网络浏览器中打开一个新的标签页,显示文件浏览器界面。可以在这里创建和编辑。文件添加到 PyCharm 项目中,并使用纯文本编辑功能进行修改。支持与外部工具集成,可以配置它以调用命令行工具或脚本来启动。,参数可以根据需要设置,工作目录设置为项目根目录。,你仍然可以在本地环境中安装和运行。

Davina_yu的博客 996

关于圣杯模式和双飞翼模式

今天的文章可谓是积蓄了我这几年来的应聘和面试经历总结出来的经验,干货满满呀!如果你能够一直坚持看到这儿,那么首先我还是十分佩服你的毅力的。所以看完之后,还是多多行动起来吧!可以非常负责地说,如果你能够坚持把我上面列举的内容都一个不拉地看完并且全部消化为自己的知识的话,那么你就至少已经达到了中级开发工程师以上的水平,进入大厂技术这块是基本没有什么问题的了。今天的文章可谓是积蓄了我这几年来的应聘和面试经历总结出来的经验,干货满满呀!如果你能够一直坚持看到这儿,那么首先我还是十分佩服你的毅力的。

2401_84152223的博客 407

基于STM32L4XX、HAL库的MAX13487EESA RS485总线收发器驱动程序设计

MAX13487EESA是一款3.3V供电的RS-485/RS-422收发器,由Maxim Integrated生产。PA4 (控制引脚) ---> /RE, DE (连接在一起)具有±15kV ESD保护的驱动器输出和接收器输入。半双工RS-485/RS-422通信。工业温度范围:-40°C至+85°C。工作电压范围:3.0V至3.6V。数据速率高达250kbps。

zhusl6688的博客 687

原型,原型链,继承(圣杯模式)

原型:原型是JavaScript中用来实现对象之间继承关系的概念。每个JavaScript对象都有一个原型对象,它是一个普通的对象,包含了对象的属性和方法。当我们访问一个对象的属性或方法时,如果对象本身不存在该属性或方法,JavaScript会自动去原型对象中查找。原型链:原型链是一种通过原型对象来实现对象之间继承关系的机制。每个对象都有一个原型对象,通过原型链,一个对象可以访问其原型对象的属性和方法。

一步一个脚印,踏实努力,向着目标前进 613

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

JS学习笔记(继承)

JS继承中的圣杯模式 // 写法一 function inherit(Target, Origin) { function F() { }; F.prototype = Origin.prototype; Target.prototype = new F(); Target.proto...

ForeverFaithCC的博客 163

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

圣杯模式

1 function inherit(son,father){ son.prototype = Object.create(father.prototype); son.prototype.constructor = son; son.prototype.uber = father.prototype; } 2 var inherit2 = (function () { var temp =

weixin_45645373的博客 379

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

11.原型链的一个重要应用:圣杯模式

一些应该掌握的知识点 JS中并没有真正意义上的继承,所谓的继承只是利用了原型和原型链的方法,同时在使用这些方法时会产生一些额外的且不希望产生的影响——创建作用域 普通继承方式的缺陷:传统的继承方式(如博文10.原型中的原型链案例所示)过多地继承了没有用的属性 借用构造函数来继承会导致: 不能继承借用构造函数的原型 每次构造函数都要多走一个函数 用共享原型来继承,不能随便改动自己的原型 一种更有优势

iClassic-Live的博客 5785

JS中的继承,重点:圣杯模式

1.原型链的继承 Grand.prototype.lastName = ‘Ji’; function Grand(){ } var grand = new Grand(); Father.prototype = grand; function Father(){ this.name=’hehe’; } var father = new Father(); Son.prototyp...

AC总有一天的博客 1702

c语言之数组应用

所谓数组,是有序的元素序列。若将有限个类型相同的变量的集合命名,那么这个名称为数组名。组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量。用于区分数组的各个元素的数字编号称为下标。数组是在程序设计中,为了处理方便, 把具有相同类型的若干元素按无序的形式组织起来的一种形式。这些无序排列的同类数据元素的集合称为数组。数组是用于储存多个相同类型数据的集合。 目录 数组作...

往事流年的博客 4885

js继承之圣杯模式

function inherit( Target , Origin){ function F(); F.prototype = Origin.prototype; Target.prototype = new F(); Target.prototype.constructor = Targ...

weixin_41436338的博客 2758

从原型链到“圣杯模式”:JavaScript 继承方案的演进与终极解法

本文系统梳理了JavaScript继承机制的演进过程:从ES5时代的"构造函数窃取"和"原型链连接"的缺陷,到利用空函数中介的"圣杯模式"解决继承问题,再到ES5的Object.create()标准化方案。最终,ES6通过class和extends语法提供了最简洁的继承实现。文章通过代码示例详细剖析了每种方法的原理、优缺点及适用场景,帮助开发者深入理解JavaScript的原型继承机制,并掌握从传统到现代的完整演进路径。

2401_88920300的博客 1139

js---继承(圣杯模式)

继承--圣杯模式 var inherit=(function(){ function F(){} return function(Origin,Target){ F.prototype=Origin.prototype; Target.prototype=new F(); Target.prototype.constructor=Target; T...

qq_37635519的博客 365

实现javascript对象继承的完美方式 圣杯模型

直接上代码:不多说,hhh: 封装成函数,实现功能的实例化 我们要养成抽象实例的能力; 继承–>extend();inherit(); 继承的方法更加适合工业化 这种方法叫做共享原型 Father.prototype.lastName=“deng”; function Father(){ } Son.prototype=Father.prototype;//也可以写成

weixin_43553231的博客 292

判断一个对象是否为数组的4种方法

问题描述 在js中判断数据类型通常使用typeof,但是typeof在判断数组和对象时的结果都是object。 console.log(typeof []); console.log(typeof {}); 那么,怎么才能区分对象和数组呢? 方法 判断原型 var obj = {}; var arr = []; console.log(arr); console.log(obj); 由上图可知,数组和对象的原型对象不一样,由此可以通过判断原型来判断一个对象是否为数组 var obj = {}

前端御书房 8139

原型和原型链,以及圣杯模式

这里写目录标题原型和原型链原型 prototype隐式原型 __proto__原型链链条全貌原型链的应用基础方法应用圣杯模式 原型和原型链 所有对象都是通过new 函数创建 所有的函数也是对象 函数中可以有属性 所有对象都是引用类型 原型 prototype 所有函数都有一个属性:prototype,称之为函数原型 默认情况下,prototype是一个普通的Object对象 默认情况下,...

空杯 466

五、对象(js)

也可以使用符号(symbol)作为属性名,来添加属性,获取这种属性时,也必须使用symbol (使用symbol添加的属性,通常是那些不希望被外界访问的属性)在使用变量存储对象时,很容易因为改变变量指向的对象,提高代码的复杂度,所以通常情况下,声明存储对象的变量时也会使用const。如果有两个变量同时指向一个对象, 通过一个变量修改对象时,对另外一个变量也会产生影响。通常属性名就是一个字符串,所以属性名可以是任何值,没有什么特殊要求。[属性值]:属性值,对象创建完成后,可以任意的添加删除对象中的属性。

weixin_44345133的博客 189
上一篇: js---call/apply,this
下一篇: js---数组,类数组
neoma安荷
博客等级 码龄9年 8粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值