gpt4 book ai didi

javascript - 使用命名空间将原型(prototype)对象分配给对象中的匿名函数,这是未定义的?

转载 作者:行者123 更新时间:2023-12-04 17:04:26 26 4
gpt4 key购买 nike

我正在尝试使用以下内容在命名空间内分配原型(prototype)(所有内容都包含在全局对象中):

原型(prototype)对象:{

        Person : function(config){

var that = this;

this.name = config.name;
this.age = config.age;

console.log(that);

that.prototype.working = function(){

console.log(this.name + 'is working');

};

},

},

然后我在控制台中使用它来检查它:

var me = new global.prototypeObjects.Person({name:'Mike', age:'40'});

这给出了这个错误:

类型错误:无法设置未定义的属性“工作”

但是,如果我明确分配原型(prototype),即:

原型(prototype)对象:{
        Person : function(config){

var that = this;

this.name = config.name;
this.age = config.age;

console.log(that);

**global.prototypeObjects.Person**.prototype.working = function(){

console.log(this.name + 'is working');

};

}



},

然后它按预期工作,我得到以下信息:

global.prototypeObjects.Person {名称:“迈克”,年龄:“40”,工作:功能}

和 me.working() 注销“迈克正在工作”

有人可以解释为什么我不能在这种情况下使用“this”?

最佳答案

你在构造函数体中定义原型(prototype)函数,你应该在函数体之外定义原型(prototype)函数:

var global={};
global.pototypeObjects= {
Person : function(config){
this.name = config.name;
this.age = config.age;
}
};
global.pototypeObjects.Person.prototype.working=function(){
console.log(this.name + " is working");
};
var p = new global.pototypeObjects.Person(
{name:"jon",age:22}
);
p.working();//jon is working

这里是一些关于原型(prototype)和设置继承的基本解释: Prototypical inheritance - writing up

最好不要在构造函数中使用 var,因为它们会创建闭包,并且这些对象需要更多的 cpu 来初始化和更多的内存。

关于javascript - 使用命名空间将原型(prototype)对象分配给对象中的匿名函数,这是未定义的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17415475/

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