Создание и передача объекта JavaScript с параметрами / настройками / параметрами - PullRequest
0 голосов
/ 07 сентября 2018

Я пытаюсь передать некоторые параметры / настройки / опции моему внешнему сценарию. Эти параметры должны быть в теге скрипта, который появляется в документе HTML. Я хотел бы, чтобы настройки по умолчанию были включены во внешний скрипт, но перезаписаны, если переданный объект person обновил настройки. Любой совет по этому вопросу будет наиболее ценным!

$(document).ready(function() {
// Default settings to be overwritten
var def_person = {
  firstName: "John",
  lastName: "Doe",
  age: 50,
  eyeColor: "blue"
};

var person = Object.assign({}, def_person, newPerson);
document.getElementById("demo").innerHTML = person.firstName + " " + person.lastName + ". He is " + person.age + " years old!";

});
<!DOCTYPE html>
<html>
<head>
<!-- Will not work if included in head -->
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script type="text/javascript" src="script.js"></script>
</head>
<body>

<p>Creating and passing a JavaScript Object.</p>

<p id="demo"></p>

<script>
  newPerson = { 
  	firstName : 'Mr.',
  	lastName : 'Livingston',
  	age : 42
}
</script>


</body>
</html>

Ответы [ 2 ]

0 голосов
/ 07 сентября 2018

Используйте Object.assign или оператор распространения для объединения значений и передачи ввода через экспортированную функцию.

var def_person = {
  firstName: "John",
  lastName: "Doe",
  age: 50,
  eyeColor: "blue"
};

function updatePerson(newPerson) {
  var person = Object.assign({}, def_person, newPerson)
  // or {...def_person, ...newPerson}
  document.getElementById("demo").innerHTML = person.firstName + " " + person.lastName + ". He is " + person.age + " years old!";
}


function init() {
  updatePerson({})
}

// Testing
init()
updatePerson({
  firstName: 'Mr.'
})
<div id='demo'></div>

Переход к сценарию через глобальный

Если вы хотите передать аргументы скрипту, не вызывая функцию после загрузки скрипта, определите их как глобальные во встроенном скрипте, и пусть ваш внешний скрипт прочитает их.

В этом примере aScript.js будет использовать newPerson, определенный в окне.

<script>
   newPerson = {firstName:'Mike'}
</script>

<script src='aScript.js'></script>

Затем вы должны проверить newPerson в своем внешнем скрипте и объединить при необходимости.

0 голосов
/ 07 сентября 2018

Может быть через window объект?

window.person = {
    firstName:"John",
    lastName:"Doe",
    age:50,
    eyeColor:"blue"
};

window - это глобальный объект для текущей вкладки браузера, поэтому вы можете что-то пропустить через него. Но это своего рода хакерское решение.

Тогда вы можете прочитать это через window.person

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...