你也可以使用這樣的代碼,它可以讓你編寫OO JavaScript代碼。你應該只將一個單位的內聚函數分組,並根據需要構建更多的對象。
請注意,function buildFullName
是一個私有函數,因爲它無法從外部訪問。
我同意你的看法,但以前沒有JavaScript知識。事實是,一個函數是JavaScript中的第一個類Object。你可以在函數中嵌套函數,它們可以有變量,並且有很多方法可以組合它們,但沒有像Java那樣的標準方法。我認爲文章JavaScript Closure 101可以幫助你清理一些東西。
/** This is our Object definition and constructor */
function Person(fname, lname) {
this.firstName = fname;
this.lastName = lname;
}
/** Anonymous function to avoid polluting the global namespace */
(function() {
/** This function will be defined public, we prefix the class name */
function Person_toString() {
//call buildFullName passing this, we could also call the function
//as buildFullName(), and it would work, but wouldn't have 'this'
return buildFullName.call(this);
}
/** Another public function */
function Person_buildGreeting() {
return "Hi " + this.firstName;
}
/** This function is private! */
function buildFullName() {
return this.firstName + " " + this.lastName;
}
/** Here we augment the Object with public functions */
Person.prototype = {
toString: Person_toString,
buildGreeting: Person_buildGreeting
};
})(); //execute the anonymous function immediately
用法示例:
var p1 = new Person('Jenny', 'Fairview');
alert("toString()=" + p1.toString());
alert("buildGreeting()=" + p1.buildGreeting());
我認爲所有這些問題都在文章中得到解答。 – Blender
你好Blender,不幸的是,文章假設你已經掌握了JS,所以他們不解釋它,因爲我想 – ajax333221
*工作地點*和*工作空間*,你的意思是*命名空間*?如果是這樣,你可以編輯你的問題只使用*命名空間*?如果不是,請解釋你的意思。 – stivlo