function openWindowAndPrint(context, title = 'Документ') {
const win = window.open();
win.document.write(context);
win.document.title = title;
win.focus(); // Required for IE
ensureImagesLoaded(win.document).then(() => win.print());
win.onafterprint = () => win.close();
return win;
}
function ensureImagesLoaded(document, waitTime = 7000) {
const images = document.querySelectorAll('img');
const loadedList = Array.from(images).map(imageLoadToPromise);
const timeout = new Promise(resolve => setTimeout(resolve, waitTime));
return Promise.race([timeout, Promise.all(loadedList)]);
}
function imageLoadToPromise(img) {
return new Promise(resolve => img.addEventListener('load', resolve));
}
win.onload = () => win.postMessage({
method: 'sendFileData',
payload,
}, '*');
windows.open(). Если вызывать через onclick, проблем с блокировкой окна быть не должно?
<script src="..."></script>
import('./mymodule').then(module => {
// тут используем модуль
});
import(/* webpackChunkName: "myname" */'./mymodule')
this.http.get
возвращает Observable, это объект библиотеки rxjs, он не является промисом или thenable и к нему не может быть применен awaitreturn this.http.get(this.env.API_URL + 'video', options).toPromise()
getToken(): Observable<string> {
return from(this.storage.getItem('token'));
}
latest() {
return this.getToken().pipe(
switchMap(token => {
const headers = new HttpHeaders({ auth: token });
return this.http.get(this.env.API_URL + 'video', { headers });
}),
)
}
Стоит ли начинать писать сразу с помощью Typescript?
el.addEventListener('click', (evt) => {
console.log(evt)
})
el.addEventListener('click', function (evt) {
console.log(evt)
})
function mySuperFunc(evt) {
// еще десяток строк
console.log(evt)
}
const mySuperFunc = (evt) => {
// еще десяток строк
console.log(evt)
}
const mySuperFunc = (evt) => evt.target;
function mySuperFunc(evt) {
return evt.target;
}
return function(x) {
.function decorator(func) {
let cache = new Map();
return function decoratedFunc(x) {
if (cache.has(x)) {
return cache.get(x);
};
let result = func.call(this, x);
cache.set(x, result);
return result
}
}
obj.fac = decorator(obj.fac); // obj.fac === decoratedFunc
Note: It's recommended to use the Web Storage API (setItem, getItem, removeItem, key, length) to prevent the pitfalls associated with using plain objects as key-value stores.
const path = require('path');
module.exports = {
entry: './src/index.ts',
devtool: 'inline-source-map',
module: {
rules: [
{
test: /\.tsx?$/,
use: 'ts-loader',
exclude: /node_modules/,
},
{
test: /\.css$/i,
use: ['style-loader', 'css-loader'],
},
],
},
resolve: {
extensions: ['.tsx', '.ts', '.js'],
},
output: {
filename: 'bundle.js',
path: path.resolve(__dirname, 'dist'),
},
};
webpack --mode=production
webpack-dev-server --mode development --inline --hot
"devDependencies": {
"css-loader": "^3.0.0",
"ts-loader": "^6.0.4",
"tslint": "^5.18.0",
"tslint-config-airbnb": "^5.11.1",
"typescript": "^3.5.2",
"webpack": "^4.35.0",
"webpack-cli": "^3.3.5",
"webpack-dev-server": "^3.7.2"
}
{
"compilerOptions": {
"allowJs": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"incremental": true,
"module": "es6",
"noImplicitAny": false,
"outDir": "./dist/",
"sourceMap": true,
"target": "es2016"
}
}
{
"extends": "tslint-config-airbnb",
"rules": {}
}
<script src="dist/bundle.js"></script>
Смею предположить, что во время выполнения конструкции . . . new Dev( . . . ) интерпритатор ещё не знает про объект c?
c
объявлена, но не проинициализирована, и ее значение undefined
function Dev
у вас в том же скоупе, то c
попадает в нее через замыкание. this
у вас в данном случае указывает на глобальный объект.Quest
с new
, то this
будет указывать на новосозданный объект и Quest
будет для него конструктором, тогда answers добавятся в прототип этого объекта.this.prototype.answers
все равно не сработает, т.к. prototype
это свойство функции в котором хранится ссылка на объект который станет прототипом для всех объектов созданных этой функцией как конструктором.this.answers