prototype 为何是不能被打印显示的呢?
那么它的意义是什么?
function Person(name, age) {
this.name = name;
this.age = age;
}
Person.prototype.sayHello = function() {
console.log(`Hello, my name is ${this.name} and I'm ${this.age} years old.`);
}
let person1 = new Person('John', 30);
person1.sayHello(); // 可调用
console.log(person1); // 没有原型上被定义的数据
console.log(person1.prototype); // undefined
console.log(Object.getPrototypeOf(person1) === Person.prototype); // true
person1.sayHello()执行过程是:
需要用 Object.getPrototypeOf(person1)
另外 console.log(person1) 里也是可以找到它的 prototype 上的属性的,只是不会直接显示子在 person1 下,而是在他的 <prototype> 下面(firefox,不同的浏览器/IDE 这个显示的“属性”名会有不同,因为这实际上不是一个“属性”,不是可以直接看到的)
在JavaScript中,prototype
不是一个实例对象可以直接访问的属性,这就是为什么你在尝试打印 person1.prototype
时会得到 undefined
。实际上,每个函数对象都有一个 prototype
属性,该属性是一个指向原型对象的指针,而这个原型对象用于实现基于原型的继承与属性共享。
person1
)时,它内部有一个指向其构造函数(这里是 Person
)的 prototype
对象的链接(通常被称为 __proto__
,尽管这不是ECMAScript标准的一部分,而是某些JavaScript引擎实现的一个属性,用于访问内部 [[Prototype]]
链接)。这个链接是自动创建的,但你不能直接通过实例来访问或修改 prototype
属性,因为该属性是定义在函数对象(构造函数)上的。prototype
允许你在所有实例之间共享方法和属性。这意味着,一旦你在原型上定义了一个方法或属性,所有的实例都可以访问它,而不需要在每个实例上单独定义。这大大节省了内存。在你的例子中,Person.prototype.sayHello
是在 Person
构造函数的原型上定义的一个方法。所有通过 new Person(...)
创建的实例都会继承这个方法,但它们并不直接拥有 prototype
属性。相反,它们通过内部的 [[Prototype]]
链接(在大多数环境中通过 __proto__
访问)来访问原型链上的方法和属性。
如果你想要查看实例的原型链,可以使用 Object.getPrototypeOf()
方法或 __proto__
(尽管不推荐使用后者,因为它不是标准属性):
console.log(Object.getPrototypeOf(person1) === Person.prototype); // true
console.log(person1.__proto__ === Person.prototype); // 大多数环境中也是 true,但不推荐
这样,你就可以看到 person1
的原型确实是 Person.prototype
,从而验证了原型链的存在和它的工作方式。
本文向大家介绍Javascript中的Prototype到底是什么,包括了Javascript中的Prototype到底是什么的使用技巧和注意事项,需要的朋友参考一下 Javascript也是面向对象的语言,但它是一种基于原型Prototype的语言,而不是基于类的语言。在Javascript中,类和对象看起来没有太多的区别。 什么是prototype: function定义的对象有一个proto
我想知道=_运算符在JavaScript中的含义。看起来像是在做作业。 示例:
问题内容: 在此页面中,我找到了新的JavaScript函数类型: 我已经知道了什么,以及做的,但不知道什么是注定的。它是什么? 问题答案: 这是一个生成器功能。 生成器是可以退出并稍后重新输入的函数。它们的上下文(变量绑定)将在重新进入时保存。 调用生成器函数不会立即执行其主体。而是返回该函数的迭代器对象。调用迭代器的方法时,将执行生成器函数的主体,直到第一个表达式指定要从迭代器返回的值,或者使
在console.log的时候: 打印结果: 有看到这个打印的对象内是key-value的键值对, 请问下: 这里是指的node的值是一个IdentifierNode类的对象吗?还是指的什么意思呢?
问题内容: 我了解JSON,但不了解JSONP。Wikipedia上有关JSON的文档是JSONP的最高搜索结果。它说: JSONP或“带填充的JSON”是JSON扩展,其中将前缀指定为调用本身的输入参数。 ??什么电话 这对我来说毫无意义。JSON是一种数据格式。没有电话 在第二个搜索结果是由某些人叫雷米,谁写的这个约JSONP: JSONP是脚本标记注入,它将响应从服务器传递到用户指定的函数。
问题内容: 我想知道 = + _ 运算符在JavaScript中的含义。看起来像是在做作业。 例: 问题答案: r = +_; 尝试将任何内容强制转换为数字。 只是一个变量名(不是运算符),可以是,等等。 例: 将“ 1”强制转换为纯数字1。 现在,不是。 此外,根据算术运算符的MDN页面: 一元加号运算符位于其操作数之前,并求值为其操作数,但是 尝试将其转换为数字(如果尚未转换为数字) 。 […