gpt4 book ai didi

javascript 原型(prototype) - 找到我的问题

转载 作者:行者123 更新时间:2023-11-30 08:54:54 24 4
gpt4 key购买 nike

我写了一个简单的 javascript 继承原型(prototype),但我遇到了问题..有人指导我正确的声明吗?

代码:

var Man = function(params){
this.name = params.name,
this.age = params.age,
this.job = params.job;
}

Man.prototype.work = function(){
return this.name +' is working as a ' + this.job;
}

var Women = function(params){
this.name = params.name,
this.age = params.age,
this.job = params.job;
}

Women.prototype = new Man(); //assigning the prototype

var man1 = new Man({name:'man1',age:'age1',job:'job1'});
console.log(man1.work()); //it works

var woman1 = new Women({name:'woman1',age:'age2',job:'job2'});
console.log(woman1.work()); // it is not.. why?

我得到的错误:

TypeError: params is undefined
[Break On This Error]

this.name = params.name,

最佳答案

您收到此错误是因为您在调用 Man 时没有任何参数:

Women.prototype = new Man();

由于在函数内部,paramsundefined,访问params.name 将引发异常。

这就是为什么这样设置原型(prototype)不方便的原因之一。此时您并不想创建 Man 的新实例,您只想将其原型(prototype)连接到原型(prototype)链中。

更好用Object.create [MDN] (包括 polyfill)以创建具有特定原型(prototype)的对象:

Women.prototype = Object.create(Man.prototype);
Women.prototype.constructor = Women;

Women 中,调用父构造函数(这并不是一个肮脏的玩笑)来传递参数:

function Women(params) {
Man.call(this, params);
}

关于javascript 原型(prototype) - 找到我的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14378915/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com