1 표현식의 개념
광범위한 개념: 반환된 모든 코드 블록은 표현식이 될 수 있습니다. 예:
var a=0;var a, b; a = 0;这个表达式的返回值为0; b = a;这个表达式的返回值为a;
할당 표현식의 반환 값은 오른쪽에 =입니다.
2 객체 지향 개념:
프로그래밍 아이디어. 핵심: 문제를 해결할 때 먼저 문제 해결에 도움이 되는 객체를 찾으세요.
장점:
ID: 스케줄러,
높은 코드 유연성,
높은 유지 관리성,
높은 확장성,
단점:
코드가 복잡해질 수 있습니다
가독성이 상대적으로 낮습니다
3 프로세스 지향:
ID: Executor
순서: 일반적인 상황에서는 중단되지 않으며 위에서부터 다음으로 단계별로 실행됩니다.
Javascript 언어의 4가지 특징:
약한 유형
멀티 패러다임
객체 기반 언어: js에서는 모든 것이 객체입니다
프로토타입 기반 언어
5 프로토타입의 개념
소위 프로토타입은 함수의 프로토타입을 참조하는 객체 속성
함수가 선언된 한 프로토타입은 존재한다
function foo(){}; foo.prototype['name']='ksir'; var f = new foo(); console.log(f.constructor ===foo.prototype.constructor);
이 함수로 생성된 모든 객체가 이 프로토타입을 공유하면, 즉 위에서 생성된 프로토타입은 모든 객체가 직접적으로 프로토타입의 모든 멤버(속성 및 메서드)에 액세스합니다.
(객체의 동적 특성은 . 또는 []를 사용하여 객체를 동적으로 생성할 수 있다는 것입니다.) 6 프로토타입의 본질
프로토타입의 본질은 객체
function Person(name,age,gender){ this.name = name; this.age = age; this.gender = gender; this.talk = function(){ console.log('hello'); } } var kangfeng = new Person('小强',21,'男'); var xiaoming = new Person('小明',20,'女'); var xiaohong = new Person('小红','19','女'); kangfeng.talk(); xiaoming.talk(); xiaohong.talk(); //思考:这三个儿女的talk方法是否一样? console.log(xiaoming.talk === kangfeng.talk); console.log(xiaohong.talk === xiaohong.talk): //这三个对象的方法是不一样,相互独立的 Person.prototype.addfu(){ console.log('给原型添加一个函数'); }
<fnName>.prototype;
object.__proto__; //两个下划线
객체의 8개 구성 요소
Math.__proto__===object.prototype;
9 프로토타입 속성 및 프로토타입 객체
프로토타입 속성: 함수의 관점에서 프로토타입은 함수의 프로토타입 속성이라고 할 수 있습니다
10 __proto__ 이중 밑줄 표준
__proto__ 이 이중 밑줄 표준은 w3c 표준이 아니며 이러한 속성은 비표준 속성입니다.
호환성 문제가 있습니다. 이중 밑줄로 프로토타입 속성을 얻을 수 없으면
function getPrototype(obj){ //判断浏览器是否兼容__proto__属性 //return !!obj.__proto__? obj.__proto__:obj.constructor.prototype; if(obj.__proto__){ //支持 return obj.__proto__; }else{ //获取该对象的构造函数 //在通过此函数的prototype属性获取其原型对象 return obj.constructor.prototype; } } function A(){}; var a = A(); console.log(getPrototype(a).constructor); //如果我们的函数中有if else return结构,我们可以用3元运算符来优化.
함수를 통해 가져와야 합니다. 11 표준 생성자 작성 방법 // 어떤 속성을 저장해야 할까요? 생성자 내부에서 어떤 속성을 추출하여 프로토타입에 배치해야 하는지
function B(name){}; B.prototype.name = 'tom'; var tom = new B;console.log(tom.name); var jim = new jim;console.log(jim.name); //结果都是tom //所以和具体某个对象息息相关的称为私有属性,这写属性都必须写在构造函数内,那些共享的属性(每个对象都具有的属性,不会随对象变化而变化, 比如说一些方法(对象的行为)--公有属性)就可以定义在原型属性中. //一般情况下,构造函数的方法放原型上 //不提倡在js原生对象上进行扩展成员 //坏处,会导致原生对象过于庞大,累赘,影响性能
생성자에 메소드 추가 일반적으로 프로토타입에 추가됩니다. 편의상 메소드는 일반적으로 객체 형태로
13가지 프로토타입의 특징
역동성:
멤버를 프로토타입으로 확장하면 생성된 객체가 직접 반영됩니다.
프로토타입 객체를 교체하면 생성된 객체가 반영되지 않고 나중에 생성되는 객체에 직접적인 영향을 미칩니다