위 코드는 정상적으로 사용할 수 있지만, 어딘가에 다음이 있습니다. 코드:
결과는 다음과 같습니다.
capitalize: function () { return this.slice(0, 1).toUpperCase() this.slice(1).toLowerCase() }
This; 분명히 우리가 원하는 결과는 아니지만, 우리가 추가한 메서드가 출력인 이유는 우리가 추가한 메서드의 열거 가능 속성이 기본값이 true이기 때문입니다.
열거 속성(열거 가능)을 false로 설정하고 DefineProperty 메서드를 사용하여 기능을 확장하면 이 문제를 피할 수 있습니다.
이제 이 코드를 다시 실행합니다.
루프를 통해 출력이 부족하다고 해서 이것이 의미하는 것은 아닙니다. 다음 코드의 정의를 참조하세요.
function () { return this.slice(0, 1).toUpperCase() this.slice( 1).toLowerCase(); }
다음은 자신의 프로젝트에서 사용할 수 있는 몇 가지 다른 확장 방법입니다.
{
객체 .defineProperty(String.prototype, 'pxToInt',
{
value: function()
{
return parsInt(this.split('px')[0]);
} ,
열거 가능: false
})
String.isHex()
문자열이 "#CCC" 또는 "#CACACA"와 같이 16진수로 표현되는지 확인
if(!String.prototype.isHex)
{
Object.defineProperty(String.prototype, 'isHex',
{
값: 함수()
{
return this.substring(0,1) == '#' &&
(this.length == 4 || this.length = = 7) &&
/^[0-9a-fA-F] $/.test(this.slice(1))
},
열거 가능: false
}); > }
String.reverse()
문자열 역방향:
if(!String.prototype.reverse)
{
Object.defineProperty(String.prototype, 'reverse',
{
값: 함수( )
{
return this.split( '' ).reverse().join( '' )
},
열거 가능: false
}
String.wordCount()
공백으로 구분하여 단어 개수 계산
if(!String.prototype.wordCount)
{
Object.defineProperty(String.prototype, 'wordCount',
{
값: function()
{
return this.split(' ').length;
},
열거 가능: false
})
String.htmlEntities()
< 및 >와 같은 HTML 태그는 특수 문자로 인코딩됩니다.
{
Object.defineProperty(String.prototype, 'htmlEntities',
{
값: 함수()
{
return String(this).replace(/&/g, '&').replace(//g, '>').replace(/"/g, '"');
},
열거 가능: false
});
}
String.stripTags()
HTML 태그 제거:
{
Object.defineProperty(String.prototype, 'stripTags',
{
value: function()
{
return this.replace(/?[^>] >/gi, '');
} ,
열거 가능: false
})
}
String.trim()
후행 공백:
{
Object.defineProperty(String.prototype, 'trim',
{
value: function()
{
return this.replace(/^s* /, "").replace(/s*$/, "");
},
열거 가능: false
})
}
문자열. StripNonAlpha()
알파벳이 아닌 문자 제거:
{
Object.defineProperty (String.prototype, 'stripNonAlpha',
{
값: function()
{
return this.replace(/[^A-Za-z ] /g, "");
},
열거 가능: false
})
Object.sizeof()
{one: “and”, two: "and"}와 같은 개체의 크기를 계산합니다.
코드 복사
Object.defineProperty(Object.prototype, 'sizeof' ,
{
값: function()
{
var counter = 0;
for(index in this) counter
return counter; 열거 가능: false
});
이런 식으로 JS 네이티브 객체의 기능을 확장하면 꽤 좋지만, 꼭 필요한 경우가 아니면(프로젝트에서 많이 사용하는 경우) 네이티브 객체에서 직접 함수를 확장하는 것은 권장하지 않습니다. 이로 인해 전역 변수가 발생하게 됩니다. 오염.
또한 기사의 pxToInt() 메소드는 필요하지 않습니다. JS의parseInt()는 다음과 같은 기능을 직접 완료할 수 있습니다.parsetInt("200px")===200
에 문제가 있는 것 같습니다. 다음은 htmlEntities 메소드입니다.
if(!String.prototype.htmlEntities)
{
Object.defineProperty(String.prototype, 'htmlEntities',
{
value: function()
{
var div = document.createElement("div");
if(div.textContent){
div.textContent=this;
}
else{
div.innerText=this; }
return div.innerHTML;
},
열거 가능: false
})