浅谈对JavaScript原型的理解

BeautyGAN: Instance-level Facial Makeup Transfer with Deep Generative Adversarial Network(2018,妆容迁移) 论文下载地址:BeautyGAN | Proceedings of the 26th ACM international conference on Multimedia 目的:在实例级实现化妆图像和非化妆图像的妆容迁移 方法:全局域集损失和本地实例级损失合并到一个双输入/输出对抗生成网络。步骤:使用一对鉴别器将非化妆面传输到化妆域,鉴别器从域的真实样本中分辨出生成的图像。在域集迁移的基础上,采用基于不同人脸区域的像素级直方图损失来实现实例级迁移。为了保持人脸的一致性和消除伪影,在总体目标函数中加入了. 阅读详情

说到JavaScript原型,我硬是花了几个月才把这个概念吃透。

原型与对象的关系就好比是印章和印章印出的印一样,我们必须要聊到的两个属性是__proto__和prototype。

   Object.prototype.Show = function() {
            console.log("Hello World!");
        }

        var obj = {
            "eat": function() {
                console.log("ok");
            }
        }

        obj.Show();
<span style="white-space:pre">	</span>console.log(obj.prototype);//undefined
        console.log(obj.__proto__ === Object.prototype);

首先说说对象字面量,每一个对象都有一个__proto__,这个属性关联着Object.prototype的,于是如果我们想让所有的对象都有特定的属性或者方法,我们就可以在Object.prototype上面挂接相应的属性即可,并且,在以上代码中,我们可以看出,非函数对象是不具有prototype这个属性的。

然后,说说prototype,这个是函数对象特有的属性(JavaScript中,万物皆对象)。

我们以构造函数的形式创建对象,一般都是这样的套路:

  function ObjCreator() {

            this.tell = function() {
                console.log("Hello World!");
            }

        }
        var obj = new ObjCreator();
        obj.tell();
        console.log(obj.__proto__===ObjCreator.prototype);//true
我们惊人的发现obj.__proto__===ObjCreator.prototype,这样,构造函数创建的对象给到对象变量上,于是我们的对象获得构造函数及其原型对象上所定义的所有属性,再进一步,我们在输出 console.log(ObjCreator.prototype.__proto__ === Object.prototype);,这个居然是true,构造函数的原型对象关联着Object的原型对象,那么,JavaScript的原型链,我们已经搞清楚一半了。在这里,如果我们想要继承,就可以直接修改原型链即可:

  function ObjCreator() {

            this.tell = function() {
                console.log("Hello World!");
            }

        }


        function Child(){


        };


        Child.prototype=new ObjCreator();

这样,以后Child构造函数创造的对象,将会拥有所有ObjCreator实例的方法和属性。

继续扯,

  console.log(Child.__proto__ === Function.prototype);这个也是true,说明构造函数的__proto__关联着函数原型对象,那么如果我们在函数原型对象上添加方法,那么构造函数就会拥有这些方法,那么,如果这个构造函数是系统定义的呢?那么不就意味着我们可以向JavaScript内置对象中扩展新的功能了吗?于是,便有了这样的代码

 Function.prototype.method = function(name, fn) {
            if (!this.prototype[name]) {
                this.prototype[name] = fn;//保证每一个对象都要有相应的方法。
                console.log(this);
            }

        }
<span style="white-space:pre">	</span>//挂接方法
        Number.method("ToInt", function() {

            return this > 0 ? Math.floor(this) : Math.ceiling(this);

        });

        console.log((10 / 3).ToInt());//3

最后,我们再打印一下Function.prototype.__proto__,它关联着Object.prototype。

于是,所有的谜题都解开了,对象通过__proto__关联着它的原型对象(继续关联它的原型对象),实现复杂的JavaScript原型链,构造函数通过"函数名.prototype"在其中插了一脚,使得我们理解原型变得困难,prototype只在函数对象中存在,并且,当我们使用构造函数new的时候,相当于新建一个对象,然后把构造函数中属性和方法以及原型对象所有的属性和方法复制到这个对象里面去,返回给我们(假如我们不使用new的话,写东西就给到了window对象上了)。

从 Junior 到 Lead:ABAP 开发者进阶路线图与真实项目练级法 本文拆解了ABAP工程师从初级到高级的成长路径,强调能力提升依赖于可复用经验的积累。对于初级开发者,建议夯实ABAP Dictionary、内表处理和数据库思维三大基础,培养数据流与规则层的结构化思维,并逐步掌握面向对象编程。中级阶段应注重代码可维护性,通过单元测试和Clean ABAP规范提升工程质量。文章指出,ABAP开发者需要学会筛选学习重点,建立知识地图,并重视团队协作中的代码可读性。关键在于将碎片知识整合为可迁移的模型,而非盲目追求新技术。 阅读详情

相关推荐

文本→图像→视频:AIGC跨模态转换全流程解析

本文旨在系统性地解析AIGC领域中跨模态内容生成的技术原理和实现方法,特别聚焦于从文本到图像再到视频的完整转换流程。跨模态表示学习的基本原理文本到图像生成的核心技术图像到视频转换的关键算法端到端跨模态生成系统的构建方法实际应用场景和性能优化策略背景介绍:建立基本概念和知识框架核心概念:解析跨模态转换的关键技术和原理算法细节:深入讲解文本到图像、图像到视频的核心算法数学模型:提供必要的数学基础和公式推导项目实战:通过完整案例展示实现过程应用场景:探讨技术的实际应用可能性。

AI天才研究院 1355

JavaScript认识

1.JavaScript 是全世界最流行的脚本语言。 2.JavaScript 被设计用来增加 HTML 页面的交互性。 3.JavaScript 可以用在 HTML 页面和 Web App 中,更可以广泛地应用在服务器、PC(台式机、笔记本电脑、平板等)、智能手机等设备上。 4.JavaScript 是一种轻量级的编程语言。 5.JavaScript 可以插入到 HTML 页面里的代码。 6.JavaScript 插入到 HTML 页面里后,可以被所有的现代浏览器执行。 .

XiaoAGiao16的博客 888

Jetson Orin Nano GPIO 实战,用 devmem 玩转 Pinmux 引脚复用配置

devmem 是一个直接读写寄存器的工具,通过 mmap 将 /dev/mem 中的物理地址区域映射到用户空间进程地址空间,从而实现直接读写,正常情况下在 /dev 下可以看到 mem。可以看到对应 bit5 bit6 分别为 1,对应配置为 E_IO_HV 为 ENABLE 以及 E_INPUT 为 ENABLE。需要 TRM 手册查看相关寄存器,以及安装 busybox,busybox 内置了 devmem。根据 TRM 手册,找到 I2C_SDA 的 pinmux 地址偏移是 0x18。

darcsdn 1649

谈谈对原型的理解

例如,如果我们有一个对象 `person`,它的原型是 `Object.prototype`,那么当我们访问 `person.toString()` 时,JavaScript 会先在 `person` 对象中查找 `toString` 方法,如果找不到,就会沿着原型链向上查找,直到在 `Object.prototype` 中找到该方法为止。当我们访问一个对象的属性或方法时,如果该对象本身没有该属性或方法,JavaScript 就会沿着该对象的原型链向上查找,直到找到该属性或方法为止。

xiaobaiqaq412的博客 193

汽车电子电气架构

控制器:从多独立 ECU → 域控制器(DCU) → 中央计算平台 + 区域控制器,硬件集成度持续提升,冗余减少;算力:从分散无集中算力 → 按域分配算力 → 全域算力集中,算力量级从 MIPS 跃升至 TOPS,支撑高阶智驾;网络:从低速 CAN/LIN 独占 → 以太网为主、总线为辅 → 高速以太网主干,数据传输速率提升千倍;软硬件:从软硬件深度绑定 → 初步解耦 → 完全解耦(SOA),实现 “硬件预埋、软件解锁”;线束。

LXY_LXY_的博客 1438

k8s RoCE 部署: k8s-rdma-shared-dev-plugin + macvlan cni

写给自己的入门篇 文章目录前言一、创建 k8s 集群二、启用 primary network三、启用 secondary networkk8s-rdma-shared-dev-pluginMultus CNISecondary CNIMulti-Network CRD四、启用 pod五、在 pod 中启动 RoCE 流量总结 前言 写给自己的扫盲篇。后续会在原理方面持续更新 一、创建 k8s 集群 k8s 集群的创建有多种方法,可以按照官方文档的说明来.

sunshuying1010的博客 9785

浅谈对Javascript的理解

javascript(H) 概念:一门客户端脚本语言 运行在客户端浏览器中,每一个浏览器都有JavaScript的解析引擎 脚本语言:不需要编译,直接就可以被浏览器解析执行了 功能: 可以用来增户和html页面的交互过程,可以来控制html元素,让页面有一些动态的效果,增强用户体验。 JavaScript发展史: 1992年,Nombase公司,开发出第一门客户端脚本语言,专门用于表单校验。命名为 :C--,后来更名为:ScriptEase 1995年,Net

weixin_42596719的博客 3433

用ST25DV芯片+KiCad快速设计NFC标签天线:参数计算/脚本生成/实测优化全流程

本文详细介绍了使用ST25DV芯片和KiCad工具设计NFC标签天线的全流程,包括参数计算、脚本生成和实测优化。通过解析芯片等效工作原理和设计思路,帮助开发者避开常见陷阱,实现高效、可量产的天线设计。文章还提供了Python计算工具和KiCad自动化脚本,大幅提升设计效率和成功率。

jj890的博客 758

谈谈你对javascript的理解

1:js全称叫 javascript,他是脚本语言,运行在客户端,是弱类型的编程性的编程语言。 2:js的引入方式 –内部引入 –外链接引入 3:js的组成部分: ECMAscript+DOM+BOM 4:js中的变量 var a=1; a是变量,1是常量 通过关键字var声明的英文字母是变量。 5:变量的作用? 通过变量来存储常量,变量这时候就代表了常量。 js中变量区分大小写。 6:变量的命名规则: –不能以关键字,保留字命名 –不能以汉字,数字开头命名 –不能命名时含有空格 –必须以$ _ 英文字母开

weixin_52183381的博客 1364

Autosar诊断实战系列05-Dcm之0x27加解密服务配置开发详解

UDS 0x27服务实战开发介绍,对解锁尝试次数及delay时间进一步解释。

initiallizer的博客 1994

【Bug已解决】openclaw max turns reached / Tool calls exceeded limit — OpenClaw 最大轮次超限解决方案

OpenClaw 在执行过程中达到最大轮次限制任务未完成,本质是 --max-turns 设置过小或任务过于复杂。文中给出增加轮次、--continue 继续、分步执行等完整方案。

一键难忘的博客 5505

认识JavaScript

1.JavaScript是什么 JavaScript是一种运行在客户端的脚本语言 脚本语言:不需要编译,运行过程由js解释器(js引擎)逐行来进行解释和执行 现在也可以基于node.js技术进行服务端编程 HTML/CSS标记语言 - 描述类语言 JS脚本语言 - 编程类语言 2.JavaScript的作用 表单动态验证(js最初的目的) 网页特效 服务端开发(node.js) 桌面特效(Electron) App(Cordova) 控制硬件-互联网(Ruff) 游戏开发(coco

我的博客 942

【机器学习-18】特征筛选:提升模型性能的关键步骤

我们将介绍不同类型的特征筛选方法,包括基于统计的方法、基于模型的方法和嵌入式方法等,并详细解释每种方法的原理和适用场景。通过特征筛选,我们可以减少数据集的维度,降低模型的复杂度,提高模型的泛化能力,并加速模型的训练过程。通过选择适当的特征筛选方法,我们可以减少模型的复杂度,提高模型的泛化能力,并加速模型的训练过程。然而,并非所有的特征都对模型的性能提升有所贡献,有些特征甚至可能是冗余的、噪声较大的或者与目标变量无关的。我们的目标是通过特征筛选选择出对欺诈检测最有用的特征,以提高模型的预测精度。

qq_38614074的博客 1万+

浅谈Js原型的理解

一、js中的原型毫无疑问一个难点,学习如果不深入很容易就晕了!     在参考了多方面的资料后,发现解释都太过专业,对于很多还没有接触过面向对象     语言的小白来说,有理解不了里面的专有名词!如果你没学过c++或者Java之类的更接触底层的语言,那就不要太深究,理解会用自然可以了,当接触到更多语言时慢慢的会理解越来越深刻! 下面我就举例分享一下prototype的概念!知

Jsoning的博客 1737

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

js原型浅谈理解

之前在学习原型(prototype)的时候,一直对原型的理解不是很清晰,只是知道每个对象都有一个原型,然后在js中万物又皆对象。在这里谈一下自己对于js原型的简单理解吧。 原型可以实现属性和方法的共享。 原型链理解: 假设有一个对象o,其有自己的属性a和b: {a:1,b:2}; 然后o的原型o.[[prototype]]又有自己的属性b和c: {b:3,c:4}; ...

weixin_30932215的博客 69

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

浅谈对js原型链的理解

最近重新学习了一下JS原型链的知识,为了避免之后自己再忘记,在此记录下自己对原型链的理解,欢迎大家一起讨论交流 js中的对象分为函数对象与普通对象,函数对象有prototype与__proto__,普通对象只有__proto__,那么怎么区分这两种对象呢? var f = function(){} //f为函数对象 var o = new f() //o 为普通对象 这里涉及两个属性 pro...

qq_36259513的博客 509

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

浅谈对js原型的理解

  一. 在JavaScript中,一切皆对象,每个对象都有一个原型对象(prototype),而指向该原型对象的内部指针则是__proto__。当我们对对象进行for in 或者for of遍历时,就会通过__proto__依次遍历对象关联的所有对象。这就是原型链,遍历所有对象的父对象直到object直至null。 function Person(name,work){ thi...

weixin_30881367的博客 93

37.js----浅谈js原型的理解

浅谈Js原型的理解 一、js中的原型毫无疑问一个难点,学习如果不深入很容易就晕了! 在参考了多方面的资料后,发现解释都太过专业,对于很多还没有接触过面向对象 语言的小白来说,有理解不了里面的专有名词!如果你没学过c++或者Java之类的更接触底层的语言,那就不要太深究,理解会用自然可以了,当接触到更多语言时慢慢的会理解越来越深刻! 下面我就举例分享一下prototype...

dengling6509的博客 134

浅谈对原型及原型链的理解

在开篇我先总结一下原型的作用: 1.数据共享 节约内存内存空间 2.实现继承 注意:函数也是一个对象,对象不一定是函数。(对象有__proto__属性,函数有prototype属性)此处说明,方便大家理解下文。 下面我将举例说明为什么要使用原型 例1: function Person(name) { this.name=name; this.eat=function () { ...

Alisane的博客 1万+

浅谈js原型和原型链

一、简述 对于javascript 对象(函数) 原型和原型链的理解,其实不那么难,简单来说,需要理解什么是原型,怎么访问原型,什么是原型链,怎么通过原型链去访问原型,就可以大概理清楚原型和原型链的基础知识。 二、浅析 1、何为原型 在js引擎启动的时候,其内核就生成了最基本的Object和Function的原型内容,也就是最原始最自然的代码。 (1)Object的原型是一个对象变量,该对象变量存...

hao255的博客 1312

浅谈JavaScript原型链

先来看一下,构造函数----实例----原型三者之间的关系 JavaScript怎么实现继承? 1.经典继承 var o = { name:"张三", age:"18" }; var obj = Object.create(o); console.log(obj.name,obj.age); 结果   2.混入式继承...

controllerha的博客 1480

浅谈我对原型链的理解。。。

说到原型链,首先我们要想到三个东西构造函数-实例对象-原型对象。 我们先说说构造函数,之前我们通常创建对象就是var一个对象出来,例如: var person = { name: 'zhangsan', age: 18, sayName: function () { console.log(this.name) } } 这样创建对象是最简单粗暴的,但是,如果我想创建...

Kreme的博客 1259
上一篇: C#数据类型详解
下一篇: 使用纯CSS实现文字超过一定的长度后自动显示省略号
遛狗的代码
博客等级 码龄11年 10粉丝 52原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值