js 생성자, 인덱스 배열 및 attribute_javascript 기술의 구현 및 사용

WBOY
풀어 주다: 2016-05-16 16:31:13
원래의
1766명이 탐색했습니다.
<script>
function p(){
 var len=arguments.length;
 for(var i=0;i<len;i++){
  document.write(arguments[i]+"<br/>");
 }
 
}
function Myclass(x,y){
 this.x=x;
 this.y=y;
 this.show=function(){
  return this.x+this.y;
 }
}
var m1=new Myclass(1,2);
var m2=new Myclass(3,4);
p(m1.show(),m2.show());
</script>
로그인 후 복사

기존 문제
1. 모든 인스턴스가 동일한 메소드로 정의된 엔터티를 복사하므로 효율성(낮은 메모리 효율성 및 낮은 실행 효율성)은 프로토타입 상속을 통해 해결할 수 있습니다
2. 속성 값(비공개, 공개)에 대한 액세스를 제어할 수 없는 문제는 폐쇄로 해결할 수 있습니다
속성 액세스의 피연산자는 변수가 아니라 객체에 대한 참조입니다
값의 정수 부분만 읽는 처리
수학[this<0?'celling':'floor'](this);

연관배열
연관 배열은 js의 객체를 통해 구현되어야 합니다
기본 작업: 키를 통해 값 가져오기, 요소 설정, 요소 삭제

<script>
var map={x:3,y:4};
p(map.x);
delete map.x; //true
p(map.x); //undefined 对不存在的元素进行访问结果是undefined ,由于可以显示地将值设置为undefined ,因此无法通过将值与undefined比较来判断值是否存在 ,可以通过for in进行枚举
a='undefined';
p(a);//undefined
p(typeof map.x==a); //true
</script>
로그인 후 복사

연관배열로 주목해야 할 점

<script>
function Myclass(x,y){
 this.x=x;
 this.y=y;
}
Myclass.prototype.z=5;
var obj=new Myclass(1,2);
for(var key in obj){
 p(key+":"+obj[key]); //会枚举出通过原型继承来的属性
}
//x:1 y:2 z:5
delete obj.x;//true
p(obj.x); //undefined
p(obj.z); //5
//通过原型继承来的属性 无法被delete删除
delete obj.z; //true
p(obj.z);//5
//在将对象作为关联数组使用时,通常都会使用字面量来创建,即使视图通过使用空的对象字面量来创建一个没有元素的关联数组,也仍会从Object类中继承原型的属性
p('toString' in obj); //true
var obj1={};
p('toString' in obj1);//true
//通过 for in枚举
p(obj1.length); //undefined
for(var k in obj1){
 p(obj1[k]);
}
//没有元素 被枚举出来 这是由于enumerable属性的缘故
//通过hasOwnProperty来判断 是本身的属性还是通过 参与原型继承而来的属性
var map={};
p(map.hasOwnProperty('toString')); //false
map['toString']=1;
p(map.hasOwnProperty('toString')); //true
delete map['toString'] ;
p(map.hasOwnProperty('toString'));//false
</script>
로그인 후 복사

속성의 속성

객체의 속성에도 몇 가지 속성이 있습니다
다음 표는 ECMAScript 5th Edition에서 정의된 속성을 요약한 것입니다. 속성 값은 value 속성
으로 지정됩니다. 양식 1

<본체> 불변 객체 즉, 생성된 후에는 상태를 변경할 수 없는 객체입니다. String 객체는 전형적인 불변 객체입니다 불변 객체를 유연하게 사용하면 프로그램의 견고성이 향상될 수 있습니다. 예를 들어 메소드 매개변수에 전달할 때 객체 내용 등을 다시 작성하는 메소드가 있습니다. 불변 객체는 다음과 같은 방법으로 js에서 구현할 수 있습니다 1. 속성(상태)을 숨기고 변경 작업을 제공하지 않습니다(클로저 구현) 2. ECMAScript 5판에서 제공하는 기능을 유연하게 활용하세요 3. 쓰기 가능하고 구성 가능한 속성, setter 및 getter를 유연하게 사용하세요 ECMAScript 5th Edition에서 객체 불변성을 지원하는 데 사용되는 함수 아래 표를 참조하세요

属性的属性名

含义

writable

可以改写属性的值

enumerable

可以通过for in枚举出

configurable

可以改变属性的属性,可以删除属性

get

可以指定属性值的getter函数

set

可以指定属性值的setter函数

속성의 속성 이름

의미


쓰기 가능

속성 값을 덮어쓸 수 있습니다

열거 가능

for in을 통해 열거할 수 있습니다

구성 가능

方法名

属性新增

属性删除

属性值变更

确认方法

preventExtensions

x

o

o

Object.isExtensible

seal

x

x

o

Object.isSealed

freeze

x

x

x

Object.isFrozen

속성의 속성을 변경할 수도 있고 속성을 삭제할 수도 있습니다

받기

속성값을 지정할 수 있는 Getter 함수
<script>
var obj={x:2,y:3};
Object.preventExtensions(obj);
//无法新增属性
obj.z=4;
p(Object.keys(obj));//x,y
//可以删除属性
delete obj.y;
p(Object.keys(obj)); //x
//可以更改属性值
obj.x=20;
p(obj.x); //20

//Object.seal例子 将属性的configurable设置为假
var obj={x:2,y:3};
Object.seal(obj);
//无法新增 也无法删除
obj.z=3;
p(Object.keys(obj)); //x,y
delete obj.x; //false
p(Object.keys(obj));//x,y
//可以改变 属性值
obj.x=20;
p(obj.x);//20



//Object.freeze例子 将属性的writable设置为假
var obj={x:2,y:3};
Object.freeze(obj);
//无法新增 也无法删除,也无法改变属性值
obj.z=3;
p(Object.keys(obj)); //x,y
delete obj.x;
p(Object.keys(obj));//x,y
//可以改变 属性值
obj.x=20;
p(obj.x);//20
</script>
로그인 후 복사
설정


속성값을 지정할 수 있는 Setter 함수
메소드 이름 새로운 속성 속성삭제 속성값 변경 확인방법
확장 방지 엑스 Object.isExtensible
인감 엑스 엑스 Object.isSealed
동결 엑스 엑스 엑스 Object.isFrozen
Object.preventExtensions 예 주의가 필요합니다 1. 위 3가지 방법을 변경한 후에는 복원이 불가능합니다 2. 프로토타입 상속에서 상속된 메서드를 변경할 수 없게 하려면 이를 표시해야 합니다
관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 추천
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿