0

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

原型对象:{

        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'});

这给出了这个错误:

TypeError:无法设置未定义的属性“工作”

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

原型对象:{

        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 {name: "Mike", age: "40", working: function}

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

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

4

2 回答 2

1

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

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

以下是关于原型和设置继承的一些基本解释:原型继承 - 编写

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

于 2013-07-02T00:12:03.753 回答
0

因为您已经实例化了该对象。prototype存在于类上,而不是对象上。你可以这样做:

this.working = function() {}

否则,您应该将其移到构造函数之外。

于 2013-07-02T00:06:14.307 回答