prototype属性

五月下旬刚开始刷一些前端的面试题,在LeetCode上找了一个JavaScript的题库,先选了一个简单的题:

请你编写一段代码实现一个数组方法,使任何数组都可以调用 array.last() 方法,这个方法将返回数组最后一个元素。如果数组中没有元素,则返回 -1 。

你可以假设数组是 JSON.parse 的输出结果。

示例 1 :
输入:nums = [null, {}, 3]
输出:3
解释:调用 nums.last() 后返回最后一个元素: 3。


示例 2 :
输入:nums = []
输出:-1
解释:因为此数组没有元素,所以应该返回 -1。

看了评论的解答

Array.prototype.last = function() {
  if (this.length === 0) {
    return -1;
  }

  return this[this.length - 1];
}

嗯,看着确实简单,但是...这个prototype是啥呢?(本人js学的比较菜 ( •̆ ₃ •̆ ))

经过一些了解,得到以下理解

`prototype`是JavaScript中一个核心的概念,它主要用于实现面向对象编程中的继承特性。简单来说,`prototype`是一个对象,用于存储共享的属性和方法,这些属性和方法可以被它的所有实例所继承。

每个JavaScript的函数都有一个`prototype`属性,该属性是一个特殊的对象,当函数作为构造函数创建新对象时,

比如

// 定义构造函数
function Person(name, age) {
  this.name = name; // 初始化属性
  this.age = age;
  
}

新创建的对象会自动链接到这个构造函数的`prototype`对象上,形成原型链(prototype chain)。这意味着,通过构造函数创建的所有实例都可以访问到`prototype`上定义的属性和方法。

例如,

Person.prototype.sayHello = function() {

 console.log('Hello!'); 

之后所有通过new Person创建的对象实例都能调用sayHello方法

const homo= new Person("李田所",24)

这样的话

homo.sayHello()就会在控制台打印 Hello了

总结一下,`prototype`的主要作用是:
1. 实现继承:让对象可以继承构造函数原型上的方法和属性。
2. 共享方法和属性:节省内存,所有实例共享同一份方法定义,而不是每个实例都有自己的副本。
3. 原型链:形成查找机制,当试图访问一个对象的属性或方法时,如果对象本身没有,JavaScript引擎会继续在其原型对象中查找,这个过程会一直延续到原型链的末端。
 

刚开始写博客,有问题还请友友们多多包涵(つ﹏⊂)


 

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: prototypeJavaScript中的一个关键属性,每一个函数对象都有一个prototype属性。在JavaScript中,对象是通过构造函数创建的,而prototype属性就是用来指向该构造函数的原型对象。 原型对象是一个普通的对象,它包含了可以被实例对象共享的属性和方法。当我们创建一个实例对象时,实例对象会通过__proto__属性链接到构造函数的原型对象上,从而实现了属性和方法的继承。 通过原型对象,我们可以为实例对象添加公共的属性和方法。当实例对象需要调用某个属性或方法时,如果实例对象自身不存在这个属性或方法,它会自动在原型对象中查找。这样就实现了属性和方法的共享和复用,提高了代码的效率。 可以通过调用构造函数的prototype属性来访问原型对象,我们可以在原型对象上添加属性和方法。例如,可以通过给Array.prototype添加方法来扩展数组对象的功能,也可以给Object.prototype添加方法来扩展所有对象的功能。 需要注意的是,原型对象是共享的,当我们修改原型对象上的属性或方法时,所有的实例对象都会受到影响。因此,在修改原型对象时需要谨慎,避免对已有的对象造成不必要的影响。 总结来说,prototype属性JavaScript中用于实现继承和共享属性的关键属性,它定义了构造函数的原型对象,使得所有通过该构造函数创建的实例对象都能够共享原型对象上的属性和方法。通过原型对象,我们可以为实例对象添加公共的属性和方法,提高代码的复用性和效率。 ### 回答2: prototype属性JavaScript中每个对象都拥有的一个属性,它是一个指针,指向该对象的原型。原型是一个普通的对象,它包含了一些可被该对象实例共享的属性和方法。 通过使用prototype属性,我们可以为对象定义共享的属性和方法。当我们创建一个对象的实例时,该对象实例将会从其原型中继承这些共享的属性和方法。 在JavaScript中,对象的原型是通过构造函数来创建的。在创建构造函数时,会自动为该构造函数创建一个prototype属性,并将其指向一个空对象。我们可以通过向原型对象中添加属性和方法,从而为实例对象提供共享的属性和方法。 原型对象中的属性和方法,可以被该构造函数创建的所有实例对象公用。当我们访问实例对象中的属性或方法时,如果实例对象本身没有该属性或方法,就会通过原型链的查找,去原型对象中寻找。 原型属性的优势在于节省内存。因为所有实例对象共享同一个原型对象,而不是每个实例对象都拥有一份相同的属性和方法。这样就可以大大减少内存占用。 另外,通过在原型对象中定义属性和方法,还可以实现动态的属性和方法。即使在对象创建之后,我们仍然可以通过修改原型对象来为其新增属性和方法,而所有实例对象都会即刻生效。 总之,prototype属性JavaScript中用于实现对象间继承和共享属性的重要机制,它可以让我们更高效地创建对象,并且提供了灵活的方式来定义和修改对象的共享属性和方法。 ### 回答3: prototype属性JavaScript中的一个特殊属性,它是由每个函数创建的对象所共享的。每个构造函数都有一个prototype属性,它指向一个对象。 使用prototype属性可以给对象添加方法和属性,这些方法和属性可以被该构造函数创建的所有对象访问和共享。当我们创建一个新对象时,JavaScript会自动为该对象创建一个__proto__属性,它指向构造函数的prototype属性。 通过给prototype属性添加方法,我们可以在构造函数创建的每个对象中共享这些方法。这么做的好处是避免了在每个对象中重复创建方法的内存消耗,同时也提高了代码的可维护性。 原型继承是JavaScript的一种核心概念,它基于对象的原型链,在对象的原型链中查找属性和方法。当我们访问一个对象的属性或方法时,JavaScript会先在对象本身查找,如果找不到,就会去原型链上的原型对象中查找。这种属性和方法的继承关系使得JavaScript的对象可以“继承”来自原型对象的属性和方法。 通过使用构造函数和对象的原型链,JavaScript实现了类似于面向对象编程语言的继承概念。我们可以创建一个构造函数,通过它创建的对象会自动继承该构造函数的原型属性和方法。这样可以实现代码的复用和灵活性,减少重复的代码。 总结来说,prototype属性是通过构造函数创建的对象所共享的一个属性。通过给prototype属性添加方法和属性,可以实现这些方法和属性在所有对象中的共享。原型继承是JavaScript中实现代码复用和灵活性的一种机制,通过原型链的查找,对象可以继承来自原型对象的属性和方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值