Javascript 如何使用类、传统的基于函数和对象文字的语法获得相同的结果?
使用三种不同的语法是否可以实现相同的结果? 我已经做了最初的两个,但是需要有关对象文字的帮助Javascript 如何使用类、传统的基于函数和对象文字的语法获得相同的结果?,javascript,Javascript,使用三种不同的语法是否可以实现相同的结果? 我已经做了最初的两个,但是需要有关对象文字的帮助 类语法 传统的基于函数的语法 对象文字语法因此对象文字语法如下所示 Animal = { noice: 'Moooo', speak: function(){ return this.noice }, eat: function(){ return this } } var cow = Object.create(Animal) cow.speak() // Moooo create(
- 类语法
- 传统的基于函数的语法
- 对象文字语法因此对象文字语法如下所示
create()使用现有对象(动物)作为新创建对象的原型,创建一个新对象Animal = { noice: 'Moooo', speak: function(){ return this.noice }, eat: function(){ return this } } var cow = Object.create(Animal) cow.speak() // Moooo
因此,新的带有的
对象没有自己的属性,但其原型将指向动物对象 仅使用对象文字语法无法将方法放入对象的原型中。但您可以使其与cow
对象一起工作。创建
和自定义构造函数:
在第三个示例中,没有名为“使用严格的” 功能动物(){ 返回Object.create({ 讲:函数(){ 还这个 } }); } Animal.eat=function(){ 还这个 } 常量动物=动物(); console.log(animal.speak())//animal{} 让我们说吧; console.log(speak())//未定义 console.log(Animal.eat)//动物 让我们吃吧;
console.log(eat())//未定义
。该对象是由类对象创建的。下面的链接解释了隐式和显式绑定,以便为Animal的类
提供适当的上下文。例如:Animal.speak.bind(Animal)将返回动物对象作为此
Yes存在。看我的answer@ViktorGarba您直接在对象上创建方法,而不是其原型。是的,方法直接在对象上设置,然后使用object.create定义一个新对象,其原型指向对象(动物)。因此,您已经在对象实例原型上设置了方法。@ViktorGarba您必须使用this
将该方法添加到原型中。您不能只使用对象文字语法。现在明白了吗?是的,很公平,你不能只使用对象文字语法,你必须结合对象文字语法使用object.create。但仅仅因为必须使用Object.create,并不意味着无法使用Object-literal语法。问题是如何获得与使用对象文字的类相同的结果。object.create
"use strict" function Animal() {} Animal.prototype.speak = function() {return this} Animal.eat = function() {return this} let obj = new Animal(); console.log(obj.speak()); // Animal {} let speak = obj.speak; console.log(speak()); // undefined console.log(Animal.eat()) // Animal let eat = Animal.eat; console.log(eat()); // undefined
"use strict" Animal = { speak: function(){ return this}, eat: function(){ return this }() // ???????????????? } console.log(Animal.speak()) // Animal {} let speak = Animal.speak; console.log(speak()) // undefined console.log(Animal.eat) // Animal ???????????????? let eat = Animal.eat; console.log(eat()) // undefined ????????????
Animal = { noice: 'Moooo', speak: function(){ return this.noice }, eat: function(){ return this } } var cow = Object.create(Animal) cow.speak() // Moooo