자바스크립트가 남다른 것은 원형 계승이다

원형 계승, 대상이 자바스크립트의 다른 대상에서 계승되는 방식.만약 네가 줄곧 다른 언어로 프로그래밍을 하고 있다면, 그것들은 통상적으로 모두 클래스 계승이 있다.
js는 es6에class 키워드를 도입했지만 문법적인 당분일 뿐입니다.js는 진정한 클래스가 없다.
깊이 연구해 보자.
원형 계승에 대해 토론하기 전에 js의 어떤 것들을 먼저 알고 싶습니다...
js에서 모든 것은 대상이다. 내 말은 거의 모든 것이다. 현재 js에는 7가지 데이터 형식이 있다.
숫자,
부어인,

유효하지 않음,
정의되지 않음,
물체
symbol//es6에 새로 추가됨
객체를 제외한 모든 데이터 유형은 기본 유형입니다.
null과undefined를 제외한 모든 js 기원 형식은 포장 함수가 있기 때문에'string'을 호출할 때 사용됩니다.js의 슬라이스(0,8)에서 코드를 막후에서 실행합니다.
String('string').slice(0,8)
그러면 함수와 수조는 크롬 컨트롤러에서 다음 코드를 실행해 봅시다
typeof [] // object
typeof {} // object
typeof function(){} //function
잠시 후에 나는 함수를 토론할 것이지만, 수조가 어떻게 대상이 되었는지 토론합시다. 그러면 수조는 js에서 특수한 대상입니다.
그룹에 색인을 만들고 예상 값을 가져올 수 있습니다.
하지만 진열 중의push,pop,splice 방법을 어디서 얻을 수 있을까요?알다시피, 막후에서, 우리의 수조는 포장기 함수 수조로 포장되어 있으며, 이것은 우리에게 모든 방법을 보여 준다.
이제 함수들이 어떻게 대상이 되는지...
// method 2
function sum(a,b){
 return a+b;
}

//method 2

const sum2 = new Function('a' , 'b' ,'return a+b')

sum(3,2) //returns 5
sum2(3,2) //returns 5
js의 두 번째 방법으로 함수를 만들 수도 있고,
마찬가지로 함수에서name과others 등 속성에 접근하여 대상과 유사한 동작을 수행할 수 있습니다
function subtract(a,b){
return a-b
}
subtract.name // returns subtract
간단하게 말하면 함수는 호출할 수 있는 특수한 대상이다...
이제 우리는 원형 유전을 깊이 연구할 수 있다...
상속은 대상이 서로로부터 속성과 방법을 어떻게 계승하는가이다
브라우저에서 코드 실행 시도
const obj = {
a: 'hello', 
b: 'bye'
}
obj1.__proto__ // return Object()
코드는 기본 대상 구조 함수를 되돌려야 하는데, 왜
js에서 대상은 기초 대상에서 계승되기 때문에...
이것이hasOwnProperty와 같은 대상에서 사용할 수 있는 이유입니다.
iprototypeof 등...우리는 우리의 물체에 이러한 방법을 정의하지 않았다.그들은 물려받았다...
js의 proto u u가 상속된 개체를 반환합니다.
하지만 수조와 함수는,
//array
const arr = [1,2,3]
//function
function func(){
 return 0;
}

console.log(func.__proto__)//returns Function()
console.log(arr.__proto__)//returns Array()
그것들은 각각 수조의 기함수와 기함수로부터 계승된다.
이것이 바로 우리가 맵, Reduce, Filter,foreach 등 방법을 수조에서 평가할 수 있는 이유입니다...그들이 물려받았기 때문에...
그런데 기함수와 수조 대상도 계승하나요?
보여주세요.
//array
const arr = [1,2,3]
//function
function func(){
 return 0;
}

console.log(Array.__proto__)//returns base Object
console.log(Function.__proto__)//returns base Object
console.log(func.__proto__.__proto__)//returns base Object
console.log(arr.__proto__.__proto__)//returns base Object
그것들은 기초 대상에서 계승되기 때문에 마지막 모든 것은 기초 대상에서 계승된다
이제 다음 코드를 보도록 하겠습니다.
//array
const arr = [1,2,3]

console.log(arr.__proto__)//return Base Array object
console.log(Array.prototype)//return Base Array object
그것들은 모두 기본 그룹의 대상을 되돌려준다...
사실 proto u는 상속 객체의 원형을 실제로 반환합니다.
이 예에서 우리의arr는 Array에서 계승되고arr. proto
실제로는 수조나 수조의 원형 속성을 가리킨다.원형
따라서 객체를 만들 때 원형 체인의 업스트림을 가리키는 proto u u 속성도 연결됩니다.
원형 체인이 무엇인지 알고 싶다면 이제는 쉽게 이해할 수 있을 텐데,
const arr = [1,2,3]
arr.map(el=> el*2)
위의 코드 세션에서, 우리는 하나의 그룹을 통해 비추고, 모든 요소를 2로 곱한다.
좋아, 우리가 위로할 수 있다면.우리는 이런 것을 보아야 한다

여기에 맵 함수가 없기 때문에 자바스크립트가 그룹의 맵 대상을 세분화할 수 없을 때 자바스크립트는 원형 체인에 들어갑니다. 이것은 자바스크립트가 그룹 대상의 원형에 들어갑니다. 거기에서 맵 대상을 찾을 수 있기 때문에 우리는 그것을 사용할 수 있습니다.
그러나 만약 우리가 원형 체인에 정의가 없는 방법을 사용한다면 어떤 일이 일어날까요
const arr = [1,2,3]
arr.lol(el=> el*2)
rr는 lol 방법이 없기 때문에 js는 원형 체인을 따라 위로 올라가 기본 그룹 대상의 원형을 찾았다. 즉, js는 맵 방법을 찾지 못했다. 그래서 js는 원형 체인을 따라 다시 위로 올라가 기본 대상의 원형, 즉 js가 맵 방법을 찾지 못했다. 그래서 js는 원형 체인을 따라 위로 올라갔다. 그러면 js가 무엇을 찾았다고 생각하느냐.
const arr = [1,2,3]
console.log(arr.__proto__.__proto__.__proto__)//returns null
Js found의null, 여기서 우리는 원형 체인의 끝을 제거한다. 이것은 기초 대상이다. Js의 모든 물건이 그것을 계승했기 때문이다. 만약에 우리가 기초 대상의 원형 체인을 제거하면javascript는null로 돌아간다. 왜냐하면 Js의null은 물건이 존재하지 않는다는 것을 의미하기 때문이다. 이것은 통상적으로 인용된null 지침이기 때문이다. 이런 상황에서 Js는 원형 체인을 제거하지 않고 오류나 정의되지 않은 것을 되돌려준다.
위의 코드에서, 우리가arr.lol ()에 접근하려고 시도할 때, 오류를 되돌려줍니다.
이제 우리가 원형 유전을 이해할 때, 이 모든 것이 우리에게 얼마나 유용한지 말할 수 있을 것이다.
const human = {
 walk(){
console.log('walking....')
} ,
 sleep(){
console.log('sleeping....')
} ,
describe(name){
console.log(`my name is ${name}`)
}
}

const programmer = {
code(){
console.log('coding ...')
}
위의 코드에서 우리는 한 사람과 한 프로그래머의 대상이 있다. 만약에 우리가 프로그래머를 걷게 하고 잠을 자게 하고 자신을 묘사하게 하려고 한다면 기술적으로 프로그래머는 사람이기 때문이다.
한 가지 방법은 sleep,walk,Description 방법을 복제하여 프로그래머의 대상에 붙이는 것이다. 그러나 프로그래머로서 우리는 영원히 자신을 되풀이해서는 안 된다. 이것이 바로 원형 계승이 작용하는 곳이다.
우리는 프로그래머의 대상이 인류를 계승하도록 할 수 있다
const human = {
 walk(){
console.log('walking....')
} ,
 sleep(){
console.log('sleeping....')
} ,
describe(name){
console.log(`my name is ${name}`)
}
}

const programmer = {
code(){
console.log('coding ...')
}
}

programmer.__proto__ = human
for(const i in programmer){
console.log(i)
}
너는 마땅히
코드
보행
자다 자다
묘사
그래서 우리 프로그래머 대상은 인간 대상의 걷기, 수면, 묘사를 계승했다...
우리가 할 수 있는 또 다른 일은,
for(const i in programmer){
if (programmer.hasOwnProperty(i)){
 console.log(i)
}
}
너는 마땅히
코드
이것은 코드 () 방법만 기록합니다. 코드 방법은 프로그래머의 대상에게 귀속되기 때문에, 프로그래머의 대상은 다른 대상에서 코드 방법을 계승하지 않기 때문에, 프로그래머를 검사할 때.hasOwnProperty(i), true로 돌아갑니다...
프로그래머 대상이 인간 대상에서 계승되었는지 검증합시다
human.isPrototypeOf(programmer) //returns true
여기서, 우리는 대상에서 사용할 수 있는 isPrototypeOf 방법을 사용하여human이 프로그래머의 원형인지, 아니면 프로그래머가 human을 계승했는지 검사한다
programmer.isPrototypeOf(human) //returns false
여기서 우리는 다른 방향에서 검사하고 있다
우리는 프로그래머가 인간의 원형인지, 아니면 인간이 프로그래머로부터 물려받았는지,
인간은 반드시 프로그래머에게서 물려받은 것이 아니다. 프로그래머는 인간에게서 물려받은 것이기 때문에false로 돌아간다
원형 유전의 마지막 일은 매우 곤혹스럽고 충격적이다. 그것은 당신을 놀라게 할 것이다.
함수만prototype 속성을 가지고 있습니다💥🤯🤯💥
기본 대상, 수조와 함수가 사실상 함수라는 것을 검증해 봅시다.
typeof Array //Function
typeof Function //Function
typeof Object //Function
그래서 그들은 원형 속성이 있는데 우리의 일반 수조는 대상이 원형 속성이 없다. 나는 알고 있다. 매우 혼란스럽다.
따라서 js의 모든 내용이 하나의 대상이고 모든 내용이 원형 체인을 통해 js의 기본 대상을 계승하는 것을 보려면 우리는 원형 체인을 따라 원형 속성의 속성을 찾을 수 있다. proto uuu는 다음 원형이 바뀔 때까지 더 높은 위치로 링크하고 proto u체인은 원형 속성을 연결하며 함수만 원형 속성을 가진다.
또 하나는 proto u를 정말로 사용해서 계승해서는 안 된다는 것이다. 이것은 성능에 해롭다. js에는 더욱 효과적인 계승 방법이 많은데 하나는 Object이다.생성()
const human = {
 walk(){
console.log('walking....')
} ,
 sleep(){
console.log('sleeping....')
} ,
describe(name){
console.log(`my name is ${name}`)
}
}

const programmer = Object.create(human) // does the same thing as programmer.__proto__

programmer.code = () => {
console.log('coding ...')
}

for(const i in programmer){
console.log(i)
}
나는 네가 마침내 원형 유전이 무엇인지 알기를 바란다...
만약 당신이 이것이 도움이 되거나 유용하다고 생각한다면 공유해 주십시오💓, 🦄, 혹은🔖. 감사합니다!

좋은 웹페이지 즐겨찾기