Сообщение Re: es6 Proxy от 21.01.2017 11:04
Изменено 21.01.2017 13:03 Serginio1
Re: es6 Proxy
Здравствуйте, Serginio1, Вы писали:
Вобщем борюсь пока на стороне es6 c Proxy
Что удалос
1. Вызов методов и свойств
2. Установка свойств
3. Вызов объекта как функции
4. Создание объекта (new) через объект
5. Применение енумератора к объекту
И использование
Так как не нашел финализатора думаю удалять объекты через ()
Например StringBuilder при вызове методов возвращает ссылку на себя
Вобщем борюсь пока на стороне es6 c Proxy
Что удалос
1. Вызов методов и свойств
2. Установка свойств
3. Вызов объекта как функции
4. Создание объекта (new) через объект
5. Применение енумератора к объекту
export interface NetObjectinterface {
(): void;
Id: number;
isNetObject: boolean;
}
function getNetObject(id: number): NetObjectinterface {
let netObject = <NetObjectinterface>function (start: number) { };
netObject.Id = id;
netObject.isNetObject = true;
return netObject;
}
export class NetObject {
static GetNetObject(id: number) { return getNetObject(id); }
}
export var NetObjectHandler: ProxyHandler<NetObject> = {
get: (target: NetObject, name: any) => {
if (name === Symbol.iterator) {
return function () {
let nextIndex=5;
return {
next: function () {
return nextIndex < 10 ?
{ value: nextIndex++, done: false } :
{ value: undefined, done: true };
}
}
}
}
if (name.startsWith('_')) {
return "propery";
}
return (...args: any[]) => {
let res: string = name;
for (let param of args) {
res += ", " + (typeof param);
if (typeof param == "object") {
res += ", " + param().Id.toString();
}
else {
res += ", " + param.toString();
}
}
return res;
}
},
set: function (target, prop, value, receiver) {
console.log("called: " + prop.toString() + " = " + value);
return true;
},
apply: (target, that, args) => {
if (args.length == 0)
return target;
return args[0];
},
construct: (target, argumentsList, newTarget) => {
var res = NetObject.GetNetObject(5);
return new Proxy(res, NetObjectHandler)
}
}И использование
submit(user:User) {
//let res = new NetObject(1);
let res = NetObject.GetNetObject(1);
let obj:any = new Proxy(res, NetObjectHandler);
this.PropertyStr = obj._Property;
obj._Property = 5;
try{
this.PropertyStr = obj().Id.toString();
this.MethodStr = obj("Hello");
this.ConstructStr = new obj(3)().Id.toString();
}
catch (e) {
console.log("ошибка " + e);
}
for (let i of obj)
console.log(i);
let p = new Proxy([1,2,3], {
enumerate: (target) => {
return ["a", "b", "c"];
}
});
for (var x of p) { // "called"
console.log(x); // "a"
}
}Так как не нашел финализатора думаю удалять объекты через ()
Например StringBuilder при вызове методов возвращает ссылку на себя
let =Net.GetType("System.Text.StringBuilder");
let sb= new StringBuilder("Первый");
sb.Append("Новая Строка")(1);
sb.AppendLine()(1);
sb.Append("Вторая Строка")(1);
sb.AppendLine()(1);
sb.AppendFormat("AppendFormat {0}, {1}, {2}, {3}, {4},", "Строка", 21, 45.89, ТекущаяДата(),истина )(1);
sb.AppendLine()(1);
sb(1);Re: es6 Proxy
Здравствуйте, Serginio1, Вы писали:
Вобщем борюсь пока на стороне es6 c Proxy
Что удалось
1. Вызов методов и свойств
2. Установка свойств
3. Вызов объекта как функции
4. Создание объекта (new) через объект
5. Применение енумератора к объекту
И использование
Так как не нашел финализатора думаю удалять объекты через ()
Например StringBuilder при вызове методов возвращает ссылку на себя
Вобщем борюсь пока на стороне es6 c Proxy
Что удалось
1. Вызов методов и свойств
2. Установка свойств
3. Вызов объекта как функции
4. Создание объекта (new) через объект
5. Применение енумератора к объекту
export interface NetObjectinterface {
(): void;
Id: number;
isNetObject: boolean;
}
function getNetObject(id: number): NetObjectinterface {
let netObject = <NetObjectinterface>function (start: number) { };
netObject.Id = id;
netObject.isNetObject = true;
return netObject;
}
export class NetObject {
static GetNetObject(id: number) { return getNetObject(id); }
}
export var NetObjectHandler: ProxyHandler<NetObject> = {
get: (target: NetObject, name: any) => {
if (name === Symbol.iterator) {
return function () {
let nextIndex=5;
return {
next: function () {
return nextIndex < 10 ?
{ value: nextIndex++, done: false } :
{ value: undefined, done: true };
}
}
}
}
if (name.startsWith('_')) {
return "propery";
}
return (...args: any[]) => {
let res: string = name;
for (let param of args) {
res += ", " + (typeof param);
if (typeof param == "object") {
res += ", " + param().Id.toString();
}
else {
res += ", " + param.toString();
}
}
return res;
}
},
set: function (target, prop, value, receiver) {
console.log("called: " + prop.toString() + " = " + value);
return true;
},
apply: (target, that, args) => {
if (args.length == 0)
return target;
return args[0];
},
construct: (target, argumentsList, newTarget) => {
var res = NetObject.GetNetObject(5);
return new Proxy(res, NetObjectHandler)
}
}И использование
submit(user:User) {
//let res = new NetObject(1);
let res = NetObject.GetNetObject(1);
let obj:any = new Proxy(res, NetObjectHandler);
this.PropertyStr = obj._Property;
obj._Property = 5;
try{
this.PropertyStr = obj().Id.toString();
this.MethodStr = obj("Hello");
this.ConstructStr = new obj(3)().Id.toString();
}
catch (e) {
console.log("ошибка " + e);
}
for (let i of obj)
console.log(i);
let p = new Proxy([1,2,3], {
enumerate: (target) => {
return ["a", "b", "c"];
}
});
for (var x of p) { // "called"
console.log(x); // "a"
}
}Так как не нашел финализатора думаю удалять объекты через ()
Например StringBuilder при вызове методов возвращает ссылку на себя
let =Net.GetType("System.Text.StringBuilder");
let sb= new StringBuilder("Первый");
sb.Append("Новая Строка")(1);
sb.AppendLine()(1);
sb.Append("Вторая Строка")(1);
sb.AppendLine()(1);
sb.AppendFormat("AppendFormat {0}, {1}, {2}, {3}, {4},", "Строка", 21, 45.89, ТекущаяДата(),истина )(1);
sb.AppendLine()(1);
sb(1);