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

JavaScript——对象的原型

如机制和原理(对象基于原型)里所记述的那样,JavaScript是一个基于原型的面向对象的语言。本文着重于对原型的实现机制进行剖析和说明。...原型链的实现 JavaScript里所有的对象都有一个名为__proto__的属性,这个属性里面存放的就是对象所参照的原型对象的引用。 ?...通过Object.getPrototypeOf()可以获得指定对象的原型对象,这也是被推荐的使用方法。但__proto__属性是可读写的,这也意味着程序可以通过该属性动态的改变对象的原型对象。...作为示例,我们首先声明一个类(构造函数)Person var Person = function(name) { this.name = name; }; Person.prototype.getName...而设值对象属性则不会遍历原型链,而是直接将属性添加到该对象自身,并不影响到原型链中的对象。

59210

js对象和原型、原型链的关系

原因是它本质上是一个内部属性,而不是一个正式的对外的 API,只是由于浏览器广泛支持,才被加入了 ES6。...(所以父类this声明的属性被所有子类实例共享)新对象赋值给SubType.prototype原型链是什么来看个例子:function foo() { }const newObj = new foo()...一个对象是否在另一个对象的原型链上如果一个对象存在另一个对象的原型链上,我们可以说:它们是继承关系。...属性查找:如果试图访问对象(实例instance)的某个属性,会首先在对象内部寻找该属性,直至找不到,然后才在该对象的原型(instance.prototype)里去找这个属性,以此类推参考视频讲解:进入学习我们用一个例子来形象说明一下...打印foo1:图片小结写了好几天,之前网上很多图文博客,那些线指来指去,就我个人看来还是比较难以理解的,所以本文纯文字的形式来描述这些概念,相信认真看完的同学肯定都有所收获,如果没看懂的话,建议多看几遍

1.5K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    6.3 被调用函数的声明和函数原型

    为了让大家有个明确的学习方向,请大家分享给有需要的人,谢谢!...一、被调用函数需要具备的条件 (1)首先被调用的函数必须是已经定义的函数(是库函数或者用户自己定义的函数) (2)如果使用库函数,应该在本文件开头用#include指令将调用有关库函数时所需用到的信...息“包含”到本文件中来 (3)如果使用用户自己定义的函数,而该函数的位置在调用它的函数的后面,应该在主调函 数中对被调函数作声明 二、函数声明 一般形式 (1)函数类型 函数名(参数类型...1 参数名1,参数类型2 参数名2,...参数类型n 参数名n) (2)函数类型 函数名(参数类型1,参数类型2,...参数类型n) 注意:如果已在文件的开头(在所有函数之前),已经对本文件中所调用的函数进行了声...明,则在个函数中不必对其所调用的函数再作声明 原创不易,未经本公众号允许禁止转载,否则追究法律责任

    1.3K3229

    说说JS中的原型对象和原型链

    什么是函数对象?每声明一个函数,此函数在JS执行解释时都会被当作一个对象来维护,这就是函数对象。...每当调用构造函数创建一个实例即普通对象后,该实例将包含一个内部的指针[[Prototype]],这个指针指向的就是构造函数的原型对象。...而使用new操作符调用函数创建出来的实例,会拥有一个内部的指针[[Prototype]],此指针指向函数的原型对象。...其实就是通过实例内部的[[Prototype]]指针去原型对象Person.prototype 上找对应的方法,然后调用。 如果我调用一个实例本身和原型对象都没有的方法,其过程是怎么样的呢?...xiaoming.sayAge() // 实例本身和原型对象都不存在的方法 (1)首先搜索xiaoming这个对象,并没有sayAge方法, (2)继续向原型对象搜索(通过内部的[[Prototype

    9210

    深入理解javascript中的原型原型的概念使用原型给对象添加方法和属性使用原型对象的属性和方法原型的陷阱小结

    也就是说,原型是函数对象的属性,不是所有对象的属性,对象经过构造函数new出来,那么这个new出来的对象的构造函数有一个属性叫原型。明确这一点很重要。...Paste_Image.png ---- 使用原型对象的属性和方法 我们使用原型的对象和方法不会在直接在构造函数上使用,而是通过构造函数new出一个对象,那么new出来的对象就会有构造函数原型里的属性和方法...(笔者第一次接触原型就没看懂这个),切记,原型是函数对象的属性,只有函数对象才有原型就容易理解了。 原型的实时性 这里特别需要提出,原型是实时的,意思就是原型对象的属性和方法会实时更新。...其实很好理解,javascript中对象是通过引用传递的,原型对象只有一份,不是new出一个对象就复制一份,所以我们对原型的操作和更新,会影响到所有的对象。这就是原型对象的实时性。 ?...主要有以下几方面: 所有函数都有一个属性prototype,这就是我们指的原型,他的初始值是一个空的对象 你可以原型对象添加属性和方法,甚至直接用另一个对象替换他 当你用构造函数new出一个对象之后,这个对象可以访问构造函数的原型对象的属性和方法

    4.3K30

    深度剖析前端JavaScript中的原型(JS的对象原型)

    JavaScript 常被描述为一种基于原型的语言 (prototype-based language)——每个对象拥有一个原型对象,对象以其原型为模板、从原型继承方法和属性。...原型对象也可能拥有原型,并从中继承方法和属性,一层一层、以此类推。这种关系常被称为原型链 (prototype chain),它解释了为何一个对象会拥有定义在其他对象中的属性和方法。...最后, 原型链上面的所有的 __proto__ 都被找完了, 浏览器所有已经声明了的 __proto__ 上都不存在这个属性,然后就得出结论,这个属性是 undefined.     ...注意:没有官方的方法用于直接访问一个对象的原型对象——原型链中的“连接”被定义在一个内部属性中,在 JavaScript 语言标准中用 [[prototype]] 表示(参见 ECMAScript)。...你可能会认为,this 关键字指向当前对象的原型对象,其实不是(还记得么?原型对象是一个内部对象,应当使用 __proto__ 访问)。

    1.1K30

    JS中的面向对象、原型、原型链、继承总结大全

    : 创建一个对象 把创建的对象赋值给this 执行函数中的代码, 即把属性和方法添加到赋值之后的this 返回新对象 用伪代码来说明上述new Person()的过程如下: // 使用new操作符时,会激活函数本身的内部属性...[[Class]]内部属性,字符串对象的一种表示, 如[Object Array] // Object.prototype.toString.call(obj)返回值指向的就是[[Class]]这个内部属性...[[Prototype]] = Person.prototype; // 调用构造函数内部属性[Call],将Person执行上下文中this设置为内部创建的对象Obj Result = Person...当使用构造函数创建一个实例之后,会给实例添加内部属性[[prototype]],这个属性是一个指针,指向构造函数的prototype(原型)对象,由于是内部属性,无法通过脚本获取,但是在一些Chrome...继承 什么是原型链 ECMA中继承的主要方法就是通过原型链,主要是一个原型对象等于另一个类型的实例,由于实例内部含有一个指向构造函数的指针,这时候相当于重写了该原型对象,此时该原型对象就包含了一个指向另一个原型的指针

    1.4K22

    在对象的原型上添加方法?

    研究了几天,也算是得出一些基本的结论。本文除了讨论“在对象的原型上添加方法”好还是坏之外,也会为大家分享一个干货,是利利自己写的“复制”变量的方法。一起来看吧~!...本文主要内容 1 “复制”/“克隆”数组的功能需求 2 在对象的原型上添加方法是否合理?...在对象的原型上添加方法是否合理? 仔细思考之后,并查阅了一些相关资料,利利最终还是放弃了将方法添加到对象的原型上,为什么呢?...1 防止冲突 我们可以想象,如果仅仅由我们一个人开发项目时,是不会出现什么冲突问题的,但是,如果参与项目的人不止一个,那么我在对象上定义一个方法,别人是不是也可以在对象上定义一个方法呢?...“复制”各类变量的功能封装 虽然放弃了将变量“复制”的功能放在原型上,但是依旧打算对这个功能进行一些扩展,封装一个能够克隆数字、字符串、数组、对象等多种数据的功能函数,岂不是更好?

    99650

    面向对象中的内部类

    } } 1.2、访问 1.2.1、创建内部类对象 外部类名.内部类名 对象名 = new 外部类型().new 内部类型(); 或 外部类名.内部类名 对象名 = 外部类对象...外部类要访问内部类的成员,必须要建立内部类的对象。...静态内部类是不需要依赖于外部类的,这点和类的静态成员属性有点类似,并且它不能使用外部类的非static成员变量或者方法,这点很好理解,因为在没有外部类的对象的情况下,可以创建静态内部类的对象,如果允许访问外部类的非...它的本质是一个带具体实现的父类或者父接口的匿名的子类对象。是最常用的内部类方式。 4.1、定义格式 匿名内部类必须继承一个父类或者实现一个父接口。...匿名内部类有两个步骤: a.临时定义一个类型的子类 b.定义后即刻创建刚刚定义的这个类的对象 new 父类名或者接口名(){ <span

    97920

    js对象和原型、原型链的关系_2023-03-02

    原因是它本质上是一个内部属性,而不是一个正式的对外的 API,只是由于浏览器广泛支持,才被加入了 ES6。...(所以父类this声明的属性被所有子类实例共享) 新对象赋值给SubType.prototype 原型链是什么 来看个例子: function foo() { } const newObj = new...一个对象是否在另一个对象的原型链上 如果一个对象存在另一个对象的原型链上,我们可以说:它们是继承关系。...属性查找: 如果试图访问对象(实例instance)的某个属性,会首先在对象内部寻找该属性,直至找不到,然后才在该对象的原型(instance.prototype)里去找这个属性,以此类推 我们用一个例子来形象说明一下...打印foo1: 图片 小结 写了好几天,之前网上很多图文博客,那些线指来指去,就我个人看来还是比较难以理解的,所以本文纯文字的形式来描述这些概念,相信认真看完的同学肯定都有所收获,如果没看懂的话,建议多看几遍

    57120

    java内部类和静态内部类区别_静态内部类对象的创建

    从之前的学习中,我们应该对静态这个关键字有一定的了解,静态代表它是属于类的,而不是属于实例的。我们可以通过类名直接对静态的玩意儿直接进行引用,但这里的Node静态内部类却是私有的。...为了找到静态内部类和普通内部类的区别,我使用jad工具,自己重写一个类似的Node类,对其进行反编译后发现: 普通内部类版本: private class List$Node { List...,存在一个隐藏的外部类引用字段,在构造内部类时,用于指向外部类的引用。...每次生成一个非静态的内部类实例,都会有这样的操作。 恰巧Node类只是外部类的一个组件,他不需要引用外部类的任何字段,所以,把它声明成静态的能减小不必要的消耗。...所以,在定义一个内部类时,如果该内部类不需要引用外部类的非静态属性/方法,则应该将它声明为静态的。 版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。

    65810

    JavaScript之面向对象学习四原型对象的动态性

    1、由于在原型中查找值的过程是一次搜索,因此我们对原型对象所做的任何修改都能够立即从实例上反映出来---即便是先创建了实例后修改原型也是如此。...的副本,所以即使修改(添加)原型的方法在创建完实例之后,该实例任然可以访问完成修改之后的原型对象!...但是如果重写整个原型对象,那么情况就不一样了,在前面的随笔中曾说过,当调用构造函数创建一个对象实例时JS会为实例添加一个指向最初原型(也就是Person.prototype)的[[prototype]]...指针,而像下面的代码中那样,把原型修改成另外一个对象,并不能改变实例中的[[prototype]]指针的值(说明白点,就是实例还是指向最初原型); 注意:实例中的[[prototype]]仅指向最初原型...从上面的图我们可以看出,重写原型对象之后,并没有是对象实例的[[prototype]]指针的值发生改变,它还是指向最初的原型对象。

    57390

    原型链中的函数和对象

    这是我参与「掘金日新计划 · 6 月更文挑战」的第6天,点击查看活动详情 __ proto__ 最近在看高程4,原型链肯定是绕不过的,本瓜之前一直认为,只要记住这句话就可以了: 一个对象的隐式原型(__...proto__)等于构造这个对象的构造函数的显式原型(prototype) 确实,所有对象都符合这句真理,在控制台打印一试便知: const str = new String("123") str....__proto__ === Function.prototype 所以,不管你怎样通 __proto__ 隐式原型向上找,最终都只能找到 Function,而 Function 的隐式原型等于它的显式原型...__proto__ === Object.prototype // true Function 这个终极构造函数,通过查找显式原型的隐式原型,竟然等于 Object 的显式原型!...__proto__=== Object.prototype // true 所有构造函数的显式原型的隐式原型 等于 Object 的显式原型!! ---- 理解 为什么要这样设定呢??

    40010

    内部类(来自类和对象的补充)

    之前我们在讲类和对象时就提到过内部类,不过当时说了等讲完抽象类和接口再讲这个,现在兑现诺言的时候到了,那我们开始内部类的学习吧! 内部类 ❤️❤️内部类是指在一个类的内部定义的另一个类。...所以实例内部类的实例化需要先创建外部类的实例,然后再通过外部类的实例来创建实例内部类的对象。...(这个懂得都懂,就不多讲了) ❤️❤️除此之外,到了其他类中我们用内部类对象引用就只能引用其内部方法和变量(不能引用外部类的) 用外部类对象引用也只能引用其方法和变量(不能引用内部类的)...2.静态内部类的创建不依赖于外部类的实例对象,可以直接通过外部类名创建。...如果需要访问外部类的非静态成员,可以通过在内部类中创建外部类的对象来实现。

    7210

    JavaScript继承的实现方式:原型语言对象继承对象原理剖析

    “原型对象”是核心概念。原型对象是新对象的模板,它将自身的属性共享给新对象。一个对象不但可以享有自己创建时和运行时定义的属性,而且可以享有原型对象的属性。 ...每一个对象都有自己的原型对象,所有对象构成一个树状的层级系统。root节点的顶层对象是一个语言原生的对象,只有它没有原型对象,其他所有对象都直接或间接继承它的属性。 ...原型语言创建有两个步骤  使用”原型对象”作为”模板”生成新对象 :这个步骤是必要的,这是每个对象出生的唯一方式。以原型为模板创建对象,这也是”原型”(prototype)的原意。 ...初始化内部属性 :这一步骤不是必要的。通俗点说,就是,对”复制品”不满意,我们可以”再加工”,使之获得不同于”模板”的”个性”。  所以在JavaScript的世界里,万物皆对象这个概念从一而终。... call 无法继承父类原型属性/方法的问题 // Object.create 方法接受传入一个作为新创建对象的原型的对象,创建一个拥有指定原型和若干个指定属性的对象 // 通过这种方法指定的任何属性都会覆盖原型对象上的同名属性

    79120

    【说站】JavaScript对象原型__ proto__的介绍

    JavaScript对象原型__ proto__的介绍 1、__proto__对象原型和原型对象 prototype 是等价的。 2、意义在于为对象的查找机制提供一个方向。...但是作为非标准属性,因此实际开发中,不可以使用这个属性,它只是内部指向原型对象prototype。...实例     // 代码说明:     function People(uname) {         this.uname = uname;     }     //设置一个公共的方法     People.prototype.sing... = function() {         console.log('正在哼哼唧唧的唱歌...');     }     let zs = new People('张三');     //实例对象身上并没有...__proto__ == People.prototype);     // true       console.log(zs); 以上就是JavaScript对象原型__ proto__的介绍,希望对大家有所帮助

    26510

    Python基础之:Python中的内部对象

    Ellipsis 等同于字面值 … ,主要与用户定义的容器数据类型的扩展切片语法结合使用。 __debug__ 编译器内部的变量,用来表示是否开启debug模式。...= 不等于 is 对象标识 is not 否定的对象标识 具有不同标识的类的实例比较结果通常为不相等,除非类定义了 __eq__()方法。...bytes 对象是由单个字节构成的不可变序列。 表示 bytes 字面值的语法与字符串字面值的大致相同,只是添加了一个 b 前缀。 bytearray 对象是 bytes 对象的可变对应物。...memoryview 对象允许 Python 代码访问一个对象的内部数据,只要该对象支持 缓冲区协议 而无需进行拷贝。 obj 必须支持缓冲区协议。...字典视图对象 由 dict.keys(), dict.values() 和 dict.items() 所返回的对象是 视图对象。

    1.5K50
    领券