javascript - 如何构建类似构造函数的函数?
问题描述
当我阅读面向 Web 开发人员的专业 JavaScript 的第 6 章面向对象编程时,它显示了通过构造函数创建对象的模式。
// implicit way
function Person(name) {
this.name = name;
}
var person1 = new Person('Greg')
person1 instanceof Person
要创建 Person 的新实例,请使用 new 运算符。以这种方式调用构造函数本质上会导致执行以下四个步骤:
创建一个新对象。
将构造函数的 this 值分配给新对象(因此 this 指向新对象)。
执行构造函数内的代码(将属性添加到新对象)。
返回新对象。
这显示了如何创建对象实例的隐式方式。
我想明确地遵循它。就像是:
function Person(name) {
var o = Object.call(this) // step 1 and step 2
o.name = name // step 3
return o // step 4
}
var person1 = new Person('Greg')
person1 instanceof Person // false
事实上,它不能作为构造函数模式。为什么?以及如何修改我的代码以使用显式方式创建构造函数?
解决方案
因为Object.call(this)
没有什么意义,因为该函数不关心其上下文并返回一个普通对象。相反,您可以使用:
Object.create(this.constructor.prototype)
推荐阅读
- ansible - 使用 Jinja2 模板创建字符串
- html - Flex 对齐内容结束引导导航项
- python - 在 Python 中有效地交换列表元素
- node.js - Socket.io 多页
- c - 什么语言环境 LC_CTYPE 用于 Windows unicode 控制台应用程序?
- javascript - 为什么在整个脚本完成后 Javascript 渲染到 DOM 的变化?
- sql - 无法通过使用 sql developer 绑定参数来更新表的列
- ios - 加速框架 - vDSP_zvmags - Swift 4.2
- python - 如何在python中生成YYYY-MM-DD格式的日期?
- wpf - 即使声明的尺寸与源相同,图像也会以大尺寸显示并被裁剪