在 AngularJS 裡想新建一個 People 對象,寫 People people = new People() 這樣的 Java 風格代碼行嗎?
AngularJS 是 JavaScript 框架,**JavaScript 沒有類的概念**,也沒有 Java 那樣的強類型聲明。創建對象的方式根本不同:
var people = {
name: '張三',
age: 25,
sayHello: function() { alert('Hi, ' + this.name); }
};
function People(name, age) {
this.name = name;
this.age = age;
}
People.prototype.sayHello = function() {
alert('Hi, ' + this.name);
};
var p1 = new People('李四', 30); // 正確寫法:var p1 = new People();
注意:People 必須是一個函數(構造函數),而非類聲明。
var peopleProto = {
sayHello: function() { console.log('Hi, ' + this.name); }
};
var p2 = Object.create(peopleProto);
p2.name = '王五';
p2.age = 28;
在 AngularJS 應用中,業務對象通常通過 factory 或 service 定義,由依賴注入容器管理:
angular.module('app').factory('People', function() {
function People(name, age) {
this.name = name;
this.age = age;
}
People.prototype.sayHello = function() { ... };
return People; // 返回構造函數
});
// 控制器中注入使用
controller('MyCtrl', function(People) {
var p = new People('趙六', 35);
});
var people = new People() 但忘記定義 People 函數:會報 People is not defined 或 People is not a constructor。AngularJS 創建對象**就是 JavaScript 創建對象**。忘掉 Java 的 Class Name = new Class(),掌握 字面量、構造函數、原型、Object.create、工廠函數 這幾種原生模式,結合 AngularJS 依賴注入管理業務模型,才是正道。