javascript 继承问题

function Person(name, age) {
                this.name = name
                this.age = age
            }

            Person.prototype.say = function () {
                console.log(`${this.name}----${this.age}`)
            }



            var obj = {}

            obj.__proto__ = Person.prototype

            Person.call(obj,"大宝",18)

            var context = Object.create(Person.prototype)

            Person.call(context,"二宝",19)


            console.log(obj)

            console.log(context)

上述代码是js继承的两种方式,打印出来的数据是一样的。那么这两种方式是否有区别呢?

阅读 1.8k
2 个回答

你把Person当成普通函数来调用,并没有涉及继承吧。

普通使用上没有区别。要深究起来,这两个api的意义和实现方式上有点区别, obj.__proto__Object.setPrototypeOf()更改原型链Object.create()从头指定原型链

MDN上倒是有提到:

由于现代 JavaScript 引擎优化属性访问所带来的特性的关系,更改对象的 [[Prototype]]在各个浏览器和
JavaScript 引擎上都是一个很慢的操作。

因此更推荐使用Oject.create()

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题