function Dude() {
this.firstName = '';
this.lastName = '';
};
var d = new Dude();
d.firstName = 'Ok mr';
d.firstName = 100;
如何防止/防止將100賦值給firstName,以便它始終是一個字符串?分配一個數字,數組另一個對象應該轉換爲一個字符串。只允許某些類型的屬性
function Dude() {
this.firstName = '';
this.lastName = '';
};
var d = new Dude();
d.firstName = 'Ok mr';
d.firstName = 100;
如何防止/防止將100賦值給firstName,以便它始終是一個字符串?分配一個數字,數組另一個對象應該轉換爲一個字符串。只允許某些類型的屬性
function Dude() {
this.firstName = '';
this.lastName = '';
Dude.prototype.setFirstName(name) = function() {
if(typeof name != "string") this.firstName = name.toString();
else this.firstName = name;
};
Dude.prototype.setLastName(name) = function() {
if(typeof name != "string") this.lastName = name.toString();
else this.lastName = name;
};
}
var d = new Dude();
d.setFirstName("name");
d.setLastName(100);
這些函數檢查名稱是否爲字符串,如果不是,則名稱將被轉換爲字符串。這意味着它將作爲字符串分配給firstName或lastName。
試着讓這些變量爲private,併爲它們寫getter和setter。在setter中,您可以檢查正確的類型。查看this answer檢查類型。
function Dude() {
var firstName = '';
var lastName = '';
this.setFirstName = function(name) {
if(typeof name == 'string' || name instanceof String) {
firstName = name;
}
}
this.getFirstName = function() {
return firstName;
}
};
var d = new Dude();
d.setFirstName('Ok mr');
d.setFirstName(100);
console.log(d.getFirstName()); // returns "Ok mr"
但要注意:當您使用的輸入元素的值或引用傳遞的名稱將是一個字符串。不管它代表了一個數字還是沒有。
謝謝,我想我必須堅持使用這種方法。我正在尋找一種更純粹的方式來設置和獲取沒有函數調用的值。 –
是不是更多鈔票可言,因爲你總是可以重寫你的對象實例的任何屬性的值。但是,當您嘗試使用另一個字符串操作該值時,您的值始終會轉換爲它們的字符串表示形式,並在內部使用de String()轉換函數轉換該值。 – jonathansamines
使用getter/setter或使用方法來更改屬性並使該屬性保密。請參閱http://javascript.crockford.com/private.html瞭解如何使用私有成員變量來控制對via方法的訪問。請記住,JavaScript不是一種類型化的語言,因此解釋器不會執行某種類型 - 您必須使用自己的代碼來控制對該屬性的訪問。 – jfriend00
我首先想到了這一點, d.firstName(100),我可以做這個檢查,但我無法弄清楚如何在d.firstName()沒有()的情況下獲得值這隻會返回函數。 –