Tôi mới dùng JS và BackboneBackbone.Model mới() vs Backbone.Model.extend()
Sự khác nhau giữa hai loại này là gì?
TestModel = new Backbone.Model({ title: "test title" })
TestModel = Backbone.Model.extend({ title: "test title" })
Tôi mới dùng JS và BackboneBackbone.Model mới() vs Backbone.Model.extend()
Sự khác nhau giữa hai loại này là gì?
TestModel = new Backbone.Model({ title: "test title" })
TestModel = Backbone.Model.extend({ title: "test title" })
Có sự khác biệt cơ bản, viết tắt có thể được mô tả là "sự khác biệt giữa dự án của một ngôi nhà và chính ngôi nhà đó ".
Đối với các lập trình viên chuyên gia tôi sẽ chỉ nói rằng "mới Backbone.Model" trả về một trường hợp đối tượng, nhưng "Backbone.Model.extend" trả về một hàm constructor
FIRST: một đối tượng mới (ví dụ: Nhà)
var TestModel = new Backbone.Model({ title: "test title" });
bạn tạo đối tượng mới có cấu trúc (phương pháp và biến) đã được xác định ở một nơi khác. Đối tượng có thể được coi là "tất cả các mục không phải là gốc" của một ngôn ngữ, trong đó cho "mục gốc" tôi có nghĩa là các loại cơ bản như số nguyên, ký tự, v.v.
Trong dấu ngoặc {} bạn chuyển giá trị của một số biến hoặc phương pháp. Điều này được gọi là, như Tomasz Nurkiewicz trước đây đã giải thích, một nhà xây dựng, bởi vì nó cho phép bạn 'xây dựng' một đối tượng mới có mô hình đã được mô tả ở nơi khác.
Để cung cấp cho bạn một ví dụ được biết: bạn viết
var myArray = new Array();
Nó có nghĩa là bạn đang tạo một mảng mới, mà là một đối tượng phi bản địa mà đã được xác định ở nơi khác. bạn cũng có thể viết:
var myArray = new Array([1,2,3,4,5]);
Và nó lấp đầy mảng bằng các số đã cho.
THỨ HAI: sửa đổi định nghĩa của đối tượng hiện có (tức làCác dự án của ngôi nhà)
với
var TestModel = Backbone.Model.extend({ title: "test title" })
bạn nói điều gì đó rất đơn giản để VM của bạn: "đối tượng bạn đưa cho tôi như mặc định là rất tốt đẹp, nhưng tôi muốn thực hiện nhiều chức năng/tài sản" . Vì vậy, với mệnh đề "extend" bạn sửa đổi định nghĩa của một đối tượng thêm hoặc ghi đè lên phương thức/thuộc tính hiện có.
Ví dụ: ví dụ hay trong backbone.js được đưa ra bởi hàm so sánh của bộ sưu tập. Khi bạn mở rộng đối tượng xác định nó, "nó sẽ được sử dụng để duy trì bộ sưu tập theo thứ tự sắp xếp".
Ví dụ:
myCollection = Backbone.Collection.extend({
comparator:function(){
return item.get('name');
}
});
nói chung
Những gì bạn đang mong đợi để làm khi 'backboning' (đang phát triển sử dụng khuôn khổ backbone.js) được mở rộng đối tượng nhất định (ví dụ một Xem) với:
window.ButtonView = Backbone.View.extend({
btnText:'nothingByDefault',
myNewMethod:function(){
//do whatever you want, maybe do something triggered by an event, for instance
}
});
và sau đó sử dụng nó ở một nơi khác trong mã, một lần cho mỗi nút bạn muốn xử lý, bao gồm cả trong cú đúp là tất cả các giá trị bạn muốn cung cấp cho các đối tượng
[...]
var submitBtn = new ButtonView({btnText:"SubmitMe!"}),
var cancelBtn = new ButtonView({btnText:"Erase All!"});
.... Hy vọng điều này sẽ giúp ...
Trong trường hợp thứ hai TestModel
là một contructor mà bạn có thể sử dụng nhiều lần sau đó để tạo ra một thể hiện của mô hình:
var model = new TestModel();
Tuy nhiên qua title
để extend
có một ý nghĩa khác nhau. Có lẽ bạn nên sử dụng:
var TestModel = Backbone.Model.extend({defaults: { title: "test title" }});
hoặc vượt qua các mô hình thuộc tính khi tạo một đối tượng:
var model = new TestModel({ title: "test title" });
Trong trường hợp đầu tiên trên Mặt khác TestModel
đã là một thể hiện của mô hình (do đó nó nên được đặt tên testModel
để thực hiện theo quy ước đặt tên JavaScript):
var testModel = new Backbone.Model({ title: "test title" })
1 cho phép ẩn dụ (dự án của một ngôi nhà vs nhà riêng của mình) :) –
thể bạn nói rằng với "mở rộng" bạn tạo ra một nguyên mẫu, và với "mới" bạn tạo ra một đối tượng từ một mẫu thử nghiệm ?! – netfed