Js bind “своими руками”

142
24 сентября 2019, 04:40

В целом нужно было создать свой bind, который будет иметь тот же функционал, что и встроенный bind (нельзя использовать call, apply). Вот как это сделал я:

Function.prototype._bind = function(ctx, ...args) { 
  ctx.__temp__ = this; 
  return (function() { 
    return ctx.__temp__(...args); 
  }); 
} 
 
let obj = { 
  name: 'ban' 
}; 
 
function getname() { 
  return this.name; 
} 
 
let fnc = getname._bind(obj); 
console.log(fnc());

Создание нового свойства у контекста - вообще не вариант, так вот вопрос можно ли сделать это лучше (без нового свойства контекста).

Answer 1

Создание нового свойства у контекста - вообще не вариант, так вот вопрос можно ли сделать это лучше (без нового свойства контекста).

можно ли сделать это без нового свойства контекста

Да, можно - используйте Symbol() вместо ключа.

let obj = { 
	a: 'A', b: 'B' 
} 
 
q: { 
	let key = Symbol() 
	obj[key] = 'q 1' 
} 
q: { 
	let key = Symbol() 
	obj[key] = 'q 2' 
} 
 
q: { 
	obj[Symbol()] = 'q 3' 
	obj[Symbol()] = 'q 4' 
} 
 
let objKeys = Object.keys(obj) 
let objSymbols = Object.getOwnPropertySymbols(obj) 
let objSymbolsValues = objSymbols.map(key => obj[key]) 
 
 
/** 
	obj              {"a":"A","b":"B"} 
	objKeys          ["a","b"] 
	objSymbols       массив символом, смотри в консоле 
	objSymbolsValues ["q 1","q 2","q 3","q 4"] 
 */ 
document.body.innerHTML = ` 
<pre> 
obj              ${JSON.stringify(obj)} 
objKeys          ${JSON.stringify(objKeys)} 
objSymbols       массив символом, смотри в консоле 
objSymbolsValues ${JSON.stringify(objSymbolsValues)} 
</pre> 
`

MDN Symbol

Символ (анг. Symbol) — это уникальный и неизменяемый тип данных, который может быть использован как идентификатор для свойств объектов.

READ ALSO
Отменить рекурсию

Отменить рекурсию

Всем привет)))

160
Временная шкала от начальной даты до конечной

Временная шкала от начальной даты до конечной

Всём привет стоит задача получить массив всех дней и месяцев в промежутке между двумя датам как в диограма Ганта можно ли это сделать при...

132
Интернационализация в проекте Vue js

Интернационализация в проекте Vue js

Вот есть такой массив думал как сделать для него интернационализацию, пробовал вот так: {this$i18n

152
Как по событию .submit отловить нажатую button? [дубликат]

Как по событию .submit отловить нажатую button? [дубликат]

Данный вопрос является точным дубликатом:

170