March 08, 2022
내장 객체는 ECMAScript 사양에 정의된 javaScript 언어의 일부인 객체입니다. 예를들어 String, Math, RegExp, Object, Function등이 있습니다. 내장 객체는 애플리케이션의 환경과 관계없이 언제나 사용할 수 있습니다.
호스트 객체는 실행환경에서 제공하는 객체이고, 내장 객체가 아닌 객체는 모두 호스트 객체입니다. 예를들어 window, XmlHttpRequest, HTMLElement 등의 DOM 노드 객체와 같이 호스트 환경에 정의된 객체를 말합니다.
function Person(){}
은 정상적인 일반 함수 선언식이고, var person = Person()
은 생성자가 아니라 Person을 함수로 호출합니다. 함수를 생성자로 사용하려면 new 키워드를 필히 붙여주어야합니다. 일반 함수처럼 생성자를 호출하면 undefined가 반환되고 지정된 변수에 할당됩니다. 그리고 var person = new Person()은 Person.prototype
을 상속받은 new 연산자를 사용하여 Person 객체의 인스턴스를 생성합니다.
function Person(name) {
this.name = name
}
var person = Person('John')
console.log(person) // undefined
console.log(person.name) // Uncaught TypeError: Cannot read property 'name' of undefined
var person = new Person('John')
console.log(person) // Person { name: "John" }
console.log(person.name) // "John"
.call과 .apply는 모두 함수를 호출하는데 사용되며, 첫 번째 매개변수는 함수 내에서 this의 값으로 사용됩니다. 그러나 .call은 쉼표로 구분된 인수를 두번째 인수로 취하고, .apply는 인수의 배열을 두 번째 인수로 취합니다.
const obj = { name: 'Tom' }
const say = function(city) {
console.log(`Hello, my name is ${this.name}, I live in ${city}`)
}
const boundSay = say.bind(obj)
boundSay('seoul') // Hello, my name is Tom, I live in seoul
bind 함수가 call, apply 와 다른 점은 함수를 실행하지 않는다는 점입니다. 대신 함수를 리턴합니다. 위 코드에서 boundSay 함수는 이제부터 this를 obj로 갖고 있기 때문에 나중에 사용이 가능합니다. bind에 사용하는 나머지 rest 파라미터는 call과 apply와 동일합니다.
자바스크립트 document.write() 를 사용하면 화면에 직접 데이터를 출력할 수 있습니다. 출력되는 데이터는 문자열이 될 수 있고, 데이터객체 정보가 될 수 있습니다. 기능적으로는 전혀 문제가 되지 않지만, 사용상 주의가 필요한 함수입니다. 자바스크립트가 처음 등장했을 때는 데이터 값의 확인이나 디버그 등에 많이 활용되기도 하였습니다.
하지만 웹 페이지의 모든 내용이 로딩된 후에 document.write()메소드가 실행되면, 웹 페이지 내에 먼저 로딩된 모든 데이터를 지우고 자신의 데이터를 출력하게 됩니다. 따라서 document.write() 메소드를 테스트 이외의 용도로 사용할 때에는 충분히 주의해서 사용해야 합니다.