Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在javascript构造函数中将属性设置为函数_Javascript_Oop_Constructor - Fatal编程技术网

在javascript构造函数中将属性设置为函数

在javascript构造函数中将属性设置为函数,javascript,oop,constructor,Javascript,Oop,Constructor,我正在使用一段将name属性设置为函数的代码 name = n; this.name = function(n){ if( n ) name=n; return name; } 完整构造函数是: function Warrior(n){ name = n; this.name = function(n){ if( n ) name=n; return name; } } 我不明白这和这有什么不同;为什么我不能在像这样的toStrin

我正在使用一段将name属性设置为函数的代码

name = n;  
  this.name = function(n){
    if( n ) name=n;
    return name;
  }
完整构造函数是:

function Warrior(n){
  name = n;  
  this.name = function(n){
    if( n ) name=n;
    return name;
  }
}
我不明白这和这有什么不同;为什么我不能在像这样的toString函数中使用它

Person.prototype.toString = function(){
    return "Hi! my name's "+this.name;
}

这里的构造函数是
Warrior
,您可以将新方法
toString
添加到现有原型
Warrior
。像这样你可以添加

Warrior.prototype.toString = function(){ // code goes here }

this.name
是一个函数,所以

使用
new
关键字从同一原型创建新对象

Warrior.prototype.toString = function(){
    return "Hi! my name's "+this.name();
}
myname = new Warrior("ur name");
console(myname.toString());

您创建的是
name
的getter/setter:

  • getter是返回与对象属性关联的值的函数
  • setter是更新与对象属性关联的值的函数
  • getter和setter用于创建“派生属性”(即从其他属性派生的属性)。例如:

    职能人员(名字、姓氏){
    this.firstname=firstname;
    this.lastname=lastname;
    }
    Person.prototype.fullname=函数(fullname){
    if(arguments.length<1)返回this.firstname+“”+this.lastname;
    var newname=fullname.split(“”);
    this.firstname=newname[0];
    this.lastname=newname[1];
    返回全名;
    };
    var person=新的人员(“Aadit”、“Shah”);
    警报(人名);
    警报(person.lastname);
    警报(person.fullname());
    个人全名(“Chuck Norris”);
    警报(人名);
    警报(person.lastname);
    警报(person.fullname())可能重复的
    
    Warrior.prototype.toString = function(){
        return "Hi! my name's "+this.name();
    }
    myname = new Warrior("ur name");
    console(myname.toString());