可以使用对象名称来创建该对象的实例吗?

时间:2017-11-17 20:05:19

标签: javascript prototypal-inheritance

所以我正在学习用javascript编写代码,现在我有一个原型继承的实践示例。问题是,我必须实现这样的目标:

var human = {}
var worker = human.create()
var dev = worker.create()

var adrian = dev.create("Adrian",28,20000)

练习中的两点如下: 1)摆脱Object.create 2)摆脱属性分配例:adrian.age = 28;

我已经知道如何在“经典模型”上以某种方式做到这一点,但我不知道如何使用我的对象名称和.create

我考虑创建一个constructor函数并使用它来创建一个实例,但结果是未定义的,因为我没有创建一个以

开头的对象

3 个答案:

答案 0 :(得分:0)

我不确定你的任务究竟是什么。可能如下:

学习使用Prototypes

虽然普通对象上不存在.create方法,但您可以使其可用。

尝试输出对象本身:

Object.prototype.create = function(){
  console.log('Hello I am the object itself', this);
};

({foo: 'bar'}).create();

然后你可以接受这个并思考如何实际制作副本。例如。使用:

Object.prototype.create = function(){
  return Object.assign({}, this); // shallow copy
};

const human = {name: 'Max'};
const worker = human.create();

通过这个你基本上用worker创建了一个人类的浅叉。现在,如果你想更进一步 - >只需参数化你的函数来获取一些参数并为你新创建的对象添加更多的道具。

答案 1 :(得分:0)

在普通的javascript中,您将构造函数编写为函数。因此,要为人类编写构造函数,您可以编写:

function human(name, age) {
  this.name = name;
  this.age = age;
}

const adrian = new human("Adrian", 28);

console.log(adrian.name, adrian.age); // prints the objects properties

console.log(JSON.stringify(adrian)); // prints the created object as json string

答案 2 :(得分:0)

以下是您可能了解的示例(可能有帮助):

function Human() {
  this.showName = function() {
    console.log(this.name);
  }
}

var human = new Human();

function Worker() {
  this.showAge = function() {
    console.log(this.age);
  }
}

Worker.prototype = human;
var worker = new Worker();


function Dev(name, age, year) {
  this.name = name;
  this.age = age;
  this.year = year;

  this.showYear = function() {
    console.log(this.year);
  }
}
Dev.prototype = worker;

var adrian = new Dev('Adrian', 28, 2000);

adrian.showAge(); // 28
adrian.showName(); // 'Adrian'
adrian.showYear(); // 2000

您可以通过调用构造函数来创建对象的实例。构造函数是一个简单的函数(HumanWorkerDev)。

您创建的每个对象(通过调用构造函数与否)都有一个名为prototype的特殊属性。它可以通过设置构造函数的prototype属性来显式设置,它是继承的对象。在JavaScript中,对象继承自其他对象。

在此示例中,adrian的原型是worker

该过程可以链接,因此worker的原型是human