Bạn luôn có thể có các biến là một phần của đối tượng và sau đó sử dụng chức năng đặc biệt để sửa đổi nội dung của đối tượng. hoặc truy cập chúng qua window
.
Các mã sau đây có thể được sử dụng để bắn các sự kiện tùy chỉnh khi giá trị đã được thay đổi chừng nào bạn sử dụng định dạng changeIndex(myVars, 'variable', 5);
so với variable = 5;
Ví dụ:
function changeIndex(obj, prop, value, orgProp) {
if(typeof prop == 'string') { // Check to see if the prop is a string (first run)
return changeIndex(obj, prop.split('.'), value, prop);
} else if (prop.length === 1 && value !== undefined &&
typeof obj[prop[0]] === typeof value) {
// Check to see if the value of the passed argument matches the type of the current value
// Send custom event that the value has changed
var event = new CustomEvent('valueChanged', {'detail': {
prop : orgProp,
oldValue : obj[prop[0]],
newValue : value
}
});
window.dispatchEvent(event); // Send the custom event to the window
return obj[prop[0]] = value; // Set the value
} else if(value === undefined || typeof obj[prop[0]] !== typeof value) {
return;
} else {
// Recurse through the prop to get the correct property to change
return changeIndex(obj[prop[0]], prop.slice(1), value);
}
};
window.addEventListener('valueChanged', function(e) {
console.log("The value has changed for: " + e.detail.prop);
});
var myVars = {};
myVars.trafficLightIsGreen = false;
myVars.someoneIsRunningTheLight = false;
myVars.driverName = "John";
changeIndex(myVars, 'driverName', "Paul"); // The value has changed for: driverName
changeIndex(myVars, 'trafficLightIsGreen', true); // The value has changed for: traggicIsGreen
changeIndex(myVars, 'trafficLightIsGreen', 'false'); // Error. Doesn't set any value
var carname = "Pontiac";
var carNumber = 4;
changeIndex(window, 'carname', "Honda"); // The value has changed for: carname
changeIndex(window, 'carNumber', 4); // The value has changed for: carNumber
Nếu bạn luôn muốn kéo từ đối tượng window
bạn có thể sửa đổi changeIndex
để luôn đặt obj thành cửa sổ.
Bạn đã thử cái gì? –
Đưa chúng vào các đối tượng bằng các phương thức getter và setter, sau đó kích hoạt sự kiện trong setter. –
Tôi nghĩ bạn có thể muốn xem qua http://www.codeproject.com/Articles/13914/Observer-Design-Pattern-Using-JavaScript – MilkyWayJoe