首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

理解js的原型链,prototype与__proto__的关系

首先,要明确几个点: 1.在JS里,万物皆对象。方法(Function)是对象,方法的原型(Function.prototype)是对象。因此,它们都会具有对象共有的特点。...即:对象具有属性__proto__,可称为隐式原型,一个对象的隐式原型指向构造该对象的构造函数的原型,这也保证了实例能够访问在构造函数原型定义的属性和方法。...那么当我们调用p.Say()时,首先p没有Say这个属性, 于是,他就需要到他的__proto__中去找,也就是Person.prototype,而我们在上面定义了 Person.prototype.Say...__proto__,也就是 Programmer.prototype,也就是p1去找,由于p1也没有Say,那就去p.__proto__....最后,其实prototype只是一个假象,他在实现原型链只是起到了一个辅助作用,换句话说,他只是在new的时候有着一定的价值,而原型链的本质,其实在于__proto__!

1.2K80
您找到你想要的搜索结果了吗?
是的
没有找到

帮你彻底搞懂JS的prototype、__proto__与constructor(图解)

前言   作为一名前端工程师,必须搞懂JS的prototype、__proto__与constructor属性,相信很多初学者对这些属性存在许多困惑,容易把它们混淆,本文旨在帮助大家理清它们之间的关系并彻底搞懂它们...proto”的缩写),实际上,该属性在ES标准定义的名字应该是[[Prototype]],具体实现是由浏览器代理自己实现,谷歌浏览器的实现就是将[[Prototype]]命名为__proto__,大家清楚这个标准定义与具体实现的区别即可...但是由于JS函数也是一种对象,所以函数也拥有__proto__和constructor属性,这点是致使我们产生困惑的很大原因之一。...每个函数在创建的时候,JS会同时创建一个该函数对应的prototype对象,而函数创建的对象....本文就此结束了,希望对那些对JS的prototype、__proto__与constructor属性有困惑的同学有所帮助。

62620

轻松理解JS的面向对象,顺便搞懂prototype和__proto__

这篇文章主要讲一下JS面向对象以及 __proto__,ptototype和constructor,这几个概念都是相关的,所以一起讲了。...JS定义一个静态方法更简单,直接将它作为类函数的属性就行: Puppy.statciFunc = function() { // statciFunc就是一个静态方法 console.log...总结 最后来个总结,其实前面小节的标题就是核心了,我们再来总结下: JS的函数可以作为函数使用,也可以作为类使用 作为类使用的函数实例化时需要使用new 为了让函数具有类的功能,函数都具有prototype...函数本身也是对象,也具有__proto__,他指向的是JS内置对象Function的原型Function.prototype。...prototype本身也是对象,所以他也有__proto__,指向了他父级的prototype。__proto__和prototype的这种链式指向构成了JS的原型链。

2.3K62

JavaScript 的 __proto__ 和 prototype

当你创建函数时,JS会为这个函数自动添加prototype属性,值是空对象。...而一旦你把这个函数当作构造函数(constructor)调用(即通过new关键字调用),那么JS就会帮你创建该构造函数的实例,实例继承构造函数prototype的所有属性和方法(实例通过设置自己的__proto...对象的__proto__指向自己构造函数的prototype。obj.__proto__.__proto__...的原型链由此产生,包括我们的操作符instanceof正是通过探测obj....__proto__.__proto__... === Constructor.prototype来验证obj是否是Constructor的实例。...__proto__ 每个对象都有一个隐式原型。每个对象都有一个__proto__属性,指向创建该对象的函数的prototype。 因为函数也是一种对象,所以函数也有__proto__。 Object.

35710

彻底深刻理解js原型链之prototype,proto以及constructor(二)

__proto__===Object.prototype; Persion.prototype.__proto__===Object.prototype; Persion....只能获取到原型对象的方法和属性,所以persion1通过原型链是获取不到Persion的myName属性,但是我们可以通过原型对象的constructor来获取或者修改Persion的属性(这点太给力了...的通过原型链都可以引向Object.prototype ** 以上九条我称为原型链之九句真言(不要太在意名字,我自己随便起的 ~) ** 意外收获:this.name和this.job难道不应该在Persion也有一份吗...; 通过关系图可以看到不相等,我已经在意外收获解答了,答案为:false perison1.prototype....__proto__===Object.prototype; 只看图可以看到perison1没有prototype,是普通对象所以答案为:js报错~~ Persion.prototype.

70510

彻底深刻理解js原型链之prototype,proto以及constructor(一)

思考: js的引用数据类型都属于函数对象吗?...指针proto JavaScript,万物皆对象!...基本类型值:指的是保存在栈内存的简单数据段;除开函数对象之外的对象都是普通对象,那么普通对象范围是包含基本数据类型的 事实上(函数对象,普通对象)以及(基本数据类型,引用数据类型)是在不同角度对js变量进行的定义...所以答案是 js报错(有没有一种被我坑了的感觉) 构造器constructor思考题解答 思考:a.prototype.proto.constructor指向谁?...__proto__===null //true 这个例子告诉我们是 是null创造了一切,这不就是易经的:“道生一,一生二,二生三,三生万物!” 作者:宜信技术学院 刘晓敏

77110

proto3 协议指引

二、下面以一个简单地示例开始: proto3 文件:.proto syntax = "proto3"; message SearchRequest { string query = 1; int32...2、字段约束 singular:更直观的可以用optional来释义,可选字段,0个或1个,proto3未默认约束。 repeated:列表集合字段类型,可以包含 >=0 个字段元素。...关于默认值的操作,在我们实际的使用不免会造成一些困扰,我们需要去区分未知结果和默认值结果两者之间的区别。...bytes value = 1; } 五、枚举 enum 枚举对象 { UNKOWN = 0; //默认值机制使用(首先必须有一个枚举值为0的枚举实例,其次兼容proto2使用第一个变量为默认值的机制...七、未知字段 未能对应解析的字段会存储于未知字段。此机制在proto3最初抛弃,v3.5版本重新引入。

1.9K10

protocol buffer 的proto文件

1,支持的基本类型 .proto Type Notes C++ Type Java Type double double double float float float int32 Uses variable-length...当处理一个消息的时候,如果数据不存在该字段,相应的字段会使用默认值。这个默认值可以在消息描述里面写。...messages in each SearchResponse message – to do this, you can define a Result message type in the same .proto...implementation - the protocol buffer compiler will complain if you use one of these reserved numbers in your .proto...你会发现消息定义每个字段都有一个唯一数字标签。这些标签用来在二进制数据识别每个字段,而且如果已经开始使用最好不要改变标签。1到15的标签需要1字节编码。标签在16到2047需要2字节。

31130

彻底深刻理解js原型链之prototype,__proto__以及constructor(二)

__proto__===Object.prototype; Persion.prototype.__proto__===Object.prototype; Persion....指向自己的prototype,这也向我们解释了为什么Function.prototype类型是function 我们通过proto只能获取到原型对象的方法和属性,所以persion1通过原型链是获取不到...的通过原型链都可以引向Object.prototype 以上九条我称为原型链之九句真言(不要太在意名字,我自己随便起的 ~) 意外收获:this.name和this.job难道不应该在Persion也有一份吗...; 通过关系图可以看到不相等,我已经在意外收获解答了,答案为:false perison1.prototype....__proto__===Object.prototype; 只看图可以看到perison1没有prototype,是普通对象所以答案为:js报错~~ Persion.prototype.

94510

Protobuf - 使用scons编译proto文件

使用protobuf过程,需要先对消息结构进行定义,文件以.proto格式结尾。然后要使用google提供的protoc命令行,把.proto文件转成对应的代码文件。...protoc --proto_path=IMPORT_PATH --cpp_out=DST_DIR path/to/file.proto 这个步骤看起来非常简单,但是在实际项目中,编译过程文件众多,不可能对这个进行单独生成和编译...在每次执行项目编译时,均会对.proto格式的文件进行代码生成,引入项目进行编译。 下面附上编译脚本,适用于大多复杂项目: #!.../usr/bin/python # -*- coding: UTF-8 -*- import os #--------------protobuf------------------- #proto...") ENV_PB = Environment(BUILDERS={'Protoc':PROTOC}) PROTOFILE = Glob('*.proto') CCFILE = Glob('*.cc')

1.4K160

pbc的proto3接入

Protobuf 的 proto3发布也有挺长一段时间了。现在很多新项目慢慢转变用proto3来开发。这篇文章主要记录一下我在给pbc写对proto3支持时的一些信息,也许对其他童鞋也有点助益。...但是仍然有一些向前不兼容的细节需要处理一下,所以有了这个改造 Proto2和Proto3的差异 因为主要目的是兼容,所以下面会列出proto3得不同之处,并且会标注处理方法。...protobuf的repeated字段有两种处理方式:第一种是由多个key-value对组成,也就是说repeated的数据,key可能会出现多次;第二种是先有一个varint,表示个数,后面跟N个value...// 但是pb文件里似乎并没有这种信息,所以proto2和proto3的库选择上只能二选一了。...有个题外话,我之前写得转表工具xresloader也很早就接入了proto3,这个工具里已经用proto3了。但是sample里同时提供了proto_v2和proto_v3的示例。

2.3K10

Protobuf - 使用scons编译proto文件

使用protobuf过程,需要先对消息结构进行定义,文件以.proto格式结尾。然后要使用google提供的protoc命令行,把.proto文件转成对应的代码文件。...protoc --proto_path=IMPORT_PATH --cpp_out=DST_DIR path/to/file.proto 这个步骤看起来非常简单,但是在实际项目中,编译过程文件众多,不可能对这个进行单独生成和编译...在每次执行项目编译时,均会对.proto格式的文件进行代码生成,引入项目进行编译。 下面附上编译脚本,适用于大多复杂项目: 1 #!...-*- coding: UTF-8 -*- 3 4 import os 5 6 #--------------protobuf------------------- 7 #proto...") 13 ENV_PB = Environment(BUILDERS={'Protoc':PROTOC}) 14 PROTOFILE = Glob('*.proto') 15 CCFILE =

1.1K70

javascript 之 prototype与__proto__

首先,先介绍一个今天的主角:proto(隐式原型)与prototype(显式原型) 什么是__proto__和prototype?...__proto__(隐式原型) javascript 任意对象都具有一个内置属性,在ES5之前并没有标准的方法访问这个属性,但是在绝大多数浏览器中都支持通过__proto__来访问这个属性,我们叫他隐式原型...__proto__ === f.prototype === Func, func....__proto__ === f.prototype这个还是成立的,但是由于函数f在调用完Object.create方法之后就被销毁了,所以只有func.__proto__ === Func。...ok,最后总结一下 1.对象有属性__proto__,指向该对象的构造函数的原型对象。 2.方法除了有属性__proto__,还有属性prototype,prototype指向该方法的原型对象。

21610

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券