2016-10-27 11 views
0

以下のコードスニペットを実行してエラーが発生することは、JavaScriptがコンストラクタ関数の内部でプロパティを宣言することを許可していないことを強く疑う。コンストラクタ関数内のプロパティを宣言する

var Person = function(firstName, lastName) 
{ 
    getName: function() { 
    return this.firstName + ' ' + this.lastName; 
    } 
}; 

var person = new Person('Joe', 'Bloggs'); 

alert('Hello, ' + person.getName() + "!"); 

/* 
Exception: SyntaxError: function statement requires a name 
@Scratchpad/2:4 
*/ 

私の疑惑が正しいかどうか確認してください。そうであれば、プロパティを追加する方法は次のとおりです。

  1. オブジェクトリテラル構文を使用するかどうかを指定します。

    var Person = function(firstName, lastName) 
    { 
        this.firstName = firstName; 
        this.lastName = lastName; 
    }; 
    
    var person = { // object literal 
        getName: function() { 
    
        return this.firstName + " " + this.lastName; 
        } 
    }; 
    
  2. または、コンストラクタ関数のプロトタイプにプロパティを追加するには? labeled function declarationsとして

    getName: function() { 
        return this.firstName + ' ' + this.lastName; 
        } 
    

    var Person = function(firstName, ..) { ... } 
    Person.prototype.getName = ...; 
    
+0

'getName'をプロパティに置き換えて' getName:function(){ ''と 'this.getName = function(){ ' – gurvinder372

+0

とにかくプロトタイプに載せてください。 – RobG

答えて

1

それは次のように動作します:

var Person = function(firstName, lastName) { 
 
    this.firstName = firstName; 
 
    this.lastName = lastName; 
 

 
    this.getName = function() { 
 
    return this.firstName + ' ' + this.lastName; 
 
    } 
 
}; 
 

 
var person = new Person('Joe', 'Bloggs'); 
 

 
alert('Hello, ' + person.getName() + "!");

しかし、あなたは、プロトタイプに入れるべきで述べたので、新しいオブジェクトを共有しているように方法。

Person.prototype.getName = function getName() { return this.firstName " " + this.lastName;} 

たぶん、あなたが行くと活字体で見てみましょう。それはすべて正しいものになり、より簡単な構文になります。 そして、あなたはこのようにそれを記述します。

class Person { 
    constructor(private firstName: string, private lastName: string) {} 

    public getName(): string { 
     return this.firstName + " " + this.lastName; 
    } 
} 
また

あなたはまた、ゲッタープロパティを定義することができ(セッターもsetで動作します):あなたがしたい場合

function Person(firstName, lastName) { 
 
    this.firstName = firstName; 
 
    this.lastName = lastName; 
 
}; 
 

 
Object.defineProperty(Person.prototype, "name", { 
 
    get : function() { 
 
     return this.firstName + " " + this.lastName; 
 
    } 
 
}); 
 

 
var person = new Person('Joe', 'Bloggs'); 
 

 
alert('Hello, ' + person.name + "!");

2

私はJavaScript扱い、このラインを考えます。何が欲しいのは、おそらくこれです:

this.getName = function() { 
    return this.firstName + ' ' + this.lastName; 
    } 
関連する問題