>  기사  >  웹 프론트엔드  >  Function_javascript 기술을 위한 OOP 확장

Function_javascript 기술을 위한 OOP 확장

WBOY
WBOY원래의
2016-05-16 18:53:191016검색
코드 복사 코드는 다음과 같습니다.

// 다음은 OOP에서 사용하는 방식입니다
// 엄청 편리해요 외설스럽습니다... JS는 OOP 언어가 아니기 때문이죠...
// 하지만 훌륭한 팬들이 이렇게 하도록 안내하고 있습니다
// Belldandy는 이러한 방법을 사용하는 사람들을 축복할 것입니다 OOP로...
Function.prototype .inherits = function(base){
//파생 관계, 프로토타입은 유지됨
//단일 파생만 지원됨
this.prototype = new base( );
return this;
}
Function.prototype.create = function(){
//클래스 생성자는 new를 사용하는 것과 동일합니다
//JS는 호출을 사용하고 생성자에서 적용하므로...
/ /Belldandy, 이 문제를 해결하는 방법을 알려주셔서 감사합니다...
var _args = []
for(i=0; ;i
return eval('new this(' _args.join(',') ')'); //eval이 사용됩니다...벨, 다음에는 더 친절해 주세요 제 생각은...
}
Function.prototype.pin = function(pinner,args){
// 서비스 등록 또는 " pin" 서비스
// EventManager가 이를 수행할 수 있습니다
// 기본 구현으로 인터페이스를 구현하는 것으로 생각할 수도 있습니다...

// 예를 들어 pin EventManager는 다음과 같습니다. this: Class.pin(core.WvwntManager)
args = args [ ];
pinner.apply(this.prototype,args)
return this; 프로토타입.method = function(name, f) { //메소드 추가, 효율적입니다
if (!(f 인스턴스of Function)) throw new Error('잘못된 메소드 바인딩, ' typeof f ' 유형을 얻었습니다. 예상 함수');
this.prototype[name] = f;
return this
}
Function.prototype.property = function(name, localName, getter, setter) { //속성 추가, getter 사용자 정의 가능 및 setters
if (!name || !name instanceof String) throw new EnvironmentException('속성을 정의할 때 속성 이름이 정의되지 않았거나 문자열이 아닙니다.')
if (!localName || ! localName instanceof String) localName = '_local_' name;
if(getter 인스턴스of 함수) {
this.prototype['_belldandy_get_' name] = getter;
}
if(setter 인스턴스of 함수)
this.prototype['_belldandy_set_' name] = setter;
}
this.prototype[name] = new Function("value , force","
if (!value && !force) {
if (!this['" '_belldandy_get_' name "'] || !this['" '_belldandy_get_' name "'] 인스턴스of 함수)
return this['" localName "'] /* getter가 설정되지 않은 경우*/
else
return this['" '_belldandy_get_ ' name "'].call(this)
} else {
if (!this['" '_belldandy_set_ ' name "'] || !this['" '_belldandy_set_' name "'] 인스턴스of 함수 )
this['" localName "'] = value;
else
this['" '_belldandy_set_' name "'].call(this, value);
return this
} ") //Belldandy, 용서하세요. 비록 이것이 클로저를 생성하지는 않지만
return this
}
Function.prototype.static = function(name,value){ //속성을 포함한 정적 기능 및
this[name] = value
return this; 🎜>
에는 다음과 같은 효과가 있습니다.



코드 복사
코드는 다음과 같습니다.function foo() { }; foo .property('a', '_a') .property('b', '_b', function() { 이것을 반환합니다. _b '.' })
.method('f', function() { dwn(this.a ()) })
function bar(x,y){this.x = x;this. y = y;};
with(bar){
inherits(foo)
method ('g',function(){dwn(this.a() '-' this.b()) })
}

var f = new foo();
f.a( 1)
f.b(2)
dwn(f.a()); (f.b());
f.f();
b.a(4)
b. x',' b.y) >
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.