JavaScript面试题解析:面向对象与对象创建

需积分: 0 0 下载量 2 浏览量 更新于2024-08-30 收藏 54KB PDF 举报
"这篇教程通过一道面试题来探讨JavaScript中的面向对象编程,特别是关于对象创建的方法。" 在JavaScript中,面向对象是一种常见的编程范式,它允许我们通过类和对象来组织代码,模拟真实世界中的实体和它们之间的关系。本教程以一道面试题为例,深入讲解如何在JavaScript中创建和操作对象。 首先,面试题中提到了`Man`对象的创建。可以看到,有两种方式创建`Man`对象:一种是通过`var me = Man({fullname:"小红"})`,这是使用构造函数创建对象的方式,其中`Man`是构造函数,传入的对象参数用来初始化实例的属性;另一种是使用`new`关键字,如`var she = new Man({fullname:"小红"})`,这也是构造函数的典型用法,这里创建了一个新的`Man`对象并赋值给变量`she`。 接着,`attr`方法被用来获取和设置对象的属性。`me.attr("fullname","小明")`表示将`me`对象的`fullname`属性设置为"小明",而`me.attr("fullname")`则用于读取该属性的值。同样,`me.gender`和`she.gender`的直接赋值与读取展示了对象属性的直接操作。 面试题还涉及到了原型链的使用。当`me`和`she`都是`Man`的实例时,它们共享了相同的原型。例如,即使`me.fullname`和`me.gender`被直接修改,`she`对象的相应属性值仍然保持不变,这表明每个实例都有自己的属性副本,但共享原型上的方法和属性。 此外,`attr`方法被扩展以支持多个属性的设置,如`me.attr({"words-limit":3, "words-emote":"微笑"})`。这表明可以一次传递一个包含多个键值对的对象来更新多个属性。 `words`和`say`方法展示了对象的动态添加方法。`me.words`是用来添加“说话”的记录,而`me.say()`则输出所有记录的“话”,这里使用了原型链上的`say`方法,可能通过`Man.prototype.say`定义。`say`方法的实现可能包括收集`words`属性的值,并根据`words-emote`属性添加相应的表情。 这个面试题覆盖了JavaScript面向对象的一些核心概念,包括构造函数、对象实例、属性的读写、原型链以及动态添加方法等。对于想要深入理解JavaScript面向对象编程的学习者来说,这是一个很好的实践和学习案例。