HTML
<title>Talktive_AB Example :: ESX Trait Test</title>
<!-- esx-trait.js //-->
<script>
(function(r){function g(a){var c="none",b;Y(a)&&(ta(a)?c=ua:(b=Z(a),t("^class\\s+"+a.name+"\\s+\\{").test(b)?c=va:t("\\([^)]*\\)\\s+=>\\s+\\(").test(b)?c=wa:z(a)&&(c=xa(a)?ya:za(a)||Aa(a)||Ba(a)?Ca:aa)));return c===aa}function C(a){return["^\\[object\\s+",a,"\\]$"].join("")}function v(a,c){var b=Da[c];return!!b&&0<=b.indexOf(a)}function M(a,c,b){return function(){var d=arguments;c.apply(b,d);return a.apply(b,d)}}function N(a,c,b){return function(){var d=arguments,e=a.apply(b,d);c.apply(b,d);return e}}function Ea(a,c,b,d){return function(){var e=arguments;c.call(b,e,d);return a.apply(b,e)}}function Fa(a,c,b,d){return function(){var e=arguments,f=a.apply(b,e);c.call(b,e,d);return f}}function Ga(a,c,b,d){return function(){var e=arguments,f=a.apply(b,e);c.call(b,f,e,d);return f}}function Ha(a,c,b,d){return function(){var e=arguments,f;try{f=a.apply(b,e)}catch(l){c.call(b,l,e,d)}return f}}function Ia(a,c,b,d){return function(){var e=arguments,f,g;try{f=a.apply(b,e)}catch(m){g=m}c.call(b,g||f,e,d);return f}}function Ja(a,c,b,d){return function(){return c.call(b,a,c,arguments,d)}}function Ka(a,c){return function(){var b=this[a];g(b)||(b=u);this[a]=M(b,c,this)}}function La(a,c){return function(){var b=this[a];g(b)||(b=u);this[a]=N(b,c,this)}}function Ma(a,c){return function(b){var d=this[a];g(d)||(d=u);this[a]=Ea(d,c,this,b)}}function Na(a,c){return function(b){var d=this[a];g(d)||(d=u);this[a]=Fa(d,c,this,b)}}function Oa(a,c){return function(b){var d=this[a];g(d)||(d=u);this[a]=Ga(d,c,this,b)}}function Pa(a,c){return function(b){var d=this[a];g(d)||(d=u);this[a]=Ha(d,c,this,b)}}function Qa(a,c){return function(b){var d=this[a];g(d)||(d=u);this[a]=Ia(d,c,this,b)}}function Ra(a,c){return function(b){var d=this[a];g(d)||(d=u);this[a]=Ja(d,c,this,b)}}function ba(a,c,b){a.useTraits.rules.push(new A({type:"without",traitList:c,methodNameList:b}))}function...
JavaScript
var Talktive_A = (function () {
var
smallTalk = function () {
console.log("Talktive_A.smalltalk : ", "aaa");
},
bigTalk = function () {
console.log("Talktive_A.bigTalk : ", "AAA");
};
return function Talktive_A () {
this.smallTalk = smallTalk;
this.bigTalk = bigTalk;
};
}());
var Talktive_B = (function () {
var
smallTalk = function () {
console.log("Talktive_B.smalltalk : ", "bbb");
},
bigTalk = function () {
console.log("Talktive_B.bigTalk : ", "BBB");
};
return function Talktive_B () {
this.smallTalk = smallTalk;
this.bigTalk = bigTalk;
};
}());
(function (console, elmLogList) {
if (console) {
console.log = function () {
var
argsArray = Array.from(arguments),
message = argsArray.shift(),
elmDt = document.createElement("dt"),
elmDd = document.createElement("dd"),
elmPre = document.createElement("pre"),
elmCode = document.createElement("code"),
result = argsArray.map(function (type) {
return JSON.stringify(type);
}).join(" ,");
elmDt
.appendChild(document.createTextNode(message));
elmDd
.appendChild(document.createElement("pre"))
.appendChild(document.createElement("code"))
.appendChild(document.createTextNode(result));
elmLogList.appendChild(elmDt);
elmLogList.appendChild(elmDd);
}
}
}(console, document.querySelector("#console-log")));
var Talktive_AB = Trait.create(function (use, applicator) {
use(Talktive_A, Talktive_B)
.apply(Talktive_A, "smallTalk")
.apply(Talktive_B, "smallTalk").as("talk")
.apply(Talktive_A, "bigTalk").before(Talktive_B);
});
var talker = Talktive_AB.call({});
talker.talk(); // console does log : " bbb "
talker.smallTalk(); // console does log : " aaa "
talker.bigTalk(); // 1stly console does log : " AAA "
// 2ndly console does log : " BBB "