>  기사  >  웹 프론트엔드  >  JavaScript 객체 체인 연산 코드(jquery)_js 객체 지향

JavaScript 객체 체인 연산 코드(jquery)_js 객체 지향

WBOY
WBOY원래의
2016-05-16 18:23:541283검색

지금은 jQuery를 점차 줄여나가고 있지만(아직도 프로젝트에서는 jQuery를 사용하는 편이 더 효율적입니다. 기본적으로 일상생활에서는 사용하지 않습니다.) jQuery에 대한 의존도를 줄이고 싶습니다.
그런데 이 체인 연산 방식이 정말 매력적이네요(현재 많은 신규 라이브러리가 체인 연산을 사용하는 것 같습니다).
초보자도 두렵지 않아서 다음과 같은 코드를 작성했습니다. 중요한 건 앞으로도 잊지 않는 거겠죠, 하하.

코드 복사 코드는 다음과 같습니다.

window.k = function() {
return new k.fn.init(arguments);
}
k.fn = k.prototype = {
init:function() {
this.length = 0; //var args = Array.prototype.slice.call(arguments,0);
Array.prototype.push.apply(this,arguments[0])
return this; >show: function() {
console.log(Array.prototype.slice.call(this,0).join("$"))
return this;
},
hide :function( ) {
console.log(this);
return this
}
}
k.fn.init.prototype = k.fn; (k( "0",1,2,3,4,5).show().hide());


이것은 단순한 연쇄 작업입니다. 그러나 firbug에서는 jQuery 객체가 배열/클래스 배열을 반환하는 것을 볼 수 있습니다. 나는 이것을 달성하고 싶지만 어떻게 해야 할지 모르겠습니다. .
k.fn.prototype = new Array()로 설정할 수 없습니다. jQuery 소스 코드를 보는 것은 정말 피곤한 일입니다. .
다음은 네티즌들의 답변입니다
사실 연쇄 연산은 매우 간단합니다. 즉, 연산 개체 자체를 매번 반환하므로 개체 자체에서 정의한 모든 메서드를 연속적으로 호출할 수 있습니다.

가장 간단한 예:



코드 복사
코드는 다음과 같습니다. var o = function() { /**
뭔가를 해보세요
*/
return this;
}
o.prototype = {
action1: function() {
/**
뭔가를 해보세요
*/
반환
},
action2: function() {
/**
뭔가를 해보세요
*/
반환
}
}



다음과 같이 호출할 수 있습니다.
new o() //
.action1() // . action2(); //작업의 모든 단계는 인스턴스화된 o 객체를 반환합니다
실제로는 다음과 같습니다.
var a = new o();//이 값이 반환되지 않으면 호출을 수행할 수 없습니다. 여기에서 계속되었습니다. 반환되는 내용이 정의되지 않았기 때문입니다.
a.action1(); //현재는 a(인스턴스화된 o 객체에 대한 참조)에만 작업할 수 있습니다.
a.action2();
jQuery를 사용해 본 적이 있다면 발견했을 것입니다. jQuery에서는 객체를 인스턴스화하기 위해 new를 사용할 필요가 없으므로 객체를 사용할 때 더 편리합니다.
그래서 위에서 언급한 o 객체를 캡슐화하기 위해 다른 객체를 정의합니다.
var k = function() {
return new o()
}
이렇게 호출할 수 있습니다. :
k().action1().action2();

JS를 구성하려면 "기능화"라는 방법을 추천합니다.



코드 복사
코드는 다음과 같습니다. //강조는 굵은 글씨 //이 방법은 "JavaScript 언어의 본질" 52페이지의 5.4 기능화에 나오는 방법입니다.
var constructor = function (spec,my){
var that, other private 인스턴스 변수
my = my || {}
my
에 공유 변수 추가; 새 객체
해당
return that
}

에 권한 있는 메서드를 추가합니다.
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.