Tôi có đoạn mã sau:
function initValidation[]
{
// irrelevant code here
function validate[_block]{
// code here
}
}
Có cách nào tôi có thể gọi hàm
function initValidation[]
{
// irrelevant code here
function validate[_block]{
console.log[ "test", _block ];
}
initValidation.validate = validate;
}
initValidation[];
initValidation.validate[ "hello" ];
//test hello
5 bên ngoài hàm function initValidation[]
{
// irrelevant code here
function validate[_block]{
console.log[ "test", _block ];
}
initValidation.validate = validate;
}
initValidation[];
initValidation.validate[ "hello" ];
//test hello
6 không? Tôi đã thử gọi function initValidation[]
{
// irrelevant code here
function validate[_block]{
console.log[ "test", _block ];
}
initValidation.validate = validate;
}
initValidation[];
initValidation.validate[ "hello" ];
//test hello
5 nhưng tôi nghĩ nó chỉ hiển thị bên trong chức năng cha.Hỏi ngày 11 tháng 1 năm 2012 lúc 10:39Jan 11, 2012 at 10:39
Eduard Lucaeduard LucaEduard Luca
6.35716 Huy hiệu vàng79 Huy hiệu bạc135 Huy hiệu Đồng16 gold badges79 silver badges135 bronze badges
1
function initValidation[]
{
// irrelevant code here
function validate[_block]{
console.log[ "test", _block ];
}
initValidation.validate = validate;
}
initValidation[];
initValidation.validate[ "hello" ];
//test hello
Đã trả lời ngày 11 tháng 1 năm 2012 lúc 12:10Jan 11, 2012 at 12:10
EsailijaesailijaEsailija
Huy hiệu vàng 136K2323 gold badges267 silver badges319 bronze badges
6
Hy vọng rằng bạn đang tìm kiếm một cái gì đó như thế này
function initValidation[]
{
// irrelevant code here
this.validate = function[_block]{
// code here
}
}
var fCall = new initValidation[]
fCall.validate[param];
Điều này sẽ hoạt động.
Hy vọng điều này giải quyết vấn đề của bạn.
Đã trả lời ngày 11 tháng 1 năm 2012 lúc 12:25Jan 11, 2012 at 12:25
AmgatesamgatesAmGates
2.07916 Huy hiệu bạc29 Huy hiệu đồng16 silver badges29 bronze badges
Bạn có thể gọi
function initValidation[]
{
// irrelevant code here
function validate[_block]{
console.log[ "test", _block ];
}
initValidation.validate = validate;
}
initValidation[];
initValidation.validate[ "hello" ];
//test hello
8 từ trong vòng function initValidation[]
{
// irrelevant code here
function validate[_block]{
console.log[ "test", _block ];
}
initValidation.validate = validate;
}
initValidation[];
initValidation.validate[ "hello" ];
//test hello
9. Như thế này.function initValidation[]
{
// irrelevant code here
function validate[_block]{
// code here
}
return validate[someVar];
}
function initValidation[]
{
// irrelevant code here
function validate[_block]{
console.log[ "test", _block ];
}
initValidation.validate = validate;
}
initValidation[];
initValidation.validate[ "hello" ];
//test hello
8 không thể nhìn thấy bất cứ thứ gì ngoài function initValidation[]
{
// irrelevant code here
function validate[_block]{
console.log[ "test", _block ];
}
initValidation.validate = validate;
}
initValidation[];
initValidation.validate[ "hello" ];
//test hello
9 vì phạm vi của nó.Chỉnh sửa: Đây là đề xuất của tôi về một giải pháp. Here's my suggestion of a solution.
[function[] {
function validate[_block]{
// code here
}
function initValidation[]
{
// irrelevant code here
return validate[someVar];
}
function otherFunctions[] {
// ...
}
// initValidation = function
}[]];
// initValidation = undefined
Tất cả các chức năng của bạn sẽ được ẩn vào bất cứ điều gì bên ngoài trình bao bọc chức năng nhưng tất cả đều có thể nhìn thấy nhau.
Đã trả lời ngày 11 tháng 1 năm 2012 lúc 10:42Jan 11, 2012 at 10:42
OlicalolicalOlical
37.7K12 Huy hiệu vàng55 Huy hiệu bạc76 Huy hiệu đồng12 gold badges55 silver badges76 bronze badges
6
Lệnh gọi này sẽ trả về tuyên bố chức năng, đó là xác thực chức năng. Vì vậy, bạn có thể gọi trực tiếp sau khi gọi đầu tiên.
function initValidation[] {
// irrelevant code here
return function validate[_block] {
// code here
}
}
initValidation[][];
Đã trả lời ngày 5 tháng 10 năm 2017 lúc 14:46Oct 5, 2017 at 14:46
Tôi biết đây là một bài viết cũ nhưng nếu bạn muốn tạo một tập hợp các phiên bản mà bạn muốn làm việc với việc sử dụng lại mã đó, bạn có thể làm điều gì đó như thế này:
"use strict";
// this is derived from several posts here on SO and ultimately John Resig
function makeClassStrict[] {
var isInternal, instance;
var constructor = function[args] {
if [this instanceof constructor] {
if [typeof this.init == "function"] {
this.init.apply[this, isInternal ? args : arguments];
}
} else {
isInternal = true;
instance = new constructor[arguments];
isInternal = false;
return instance;
}
};
return constructor;
}
var MyClass = makeClassStrict[];// create "class"
MyClass.prototype.init = function[employeeName, isWorking] {
var defaultName = 'notbob';
this.name = employeeName ? employeeName : defaultName;
this.working = !!isWorking;
this.internalValidate = function[] {
return {
"check": this.working,
"who": this.name
};
};
};
MyClass.prototype.getName = function[] {
return this.name
};
MyClass.prototype.protoValidate = function[] {
return {
"check": this.working,
"who": this.name
};
};
var instanceBob = MyClass["Bob", true];// create instance
var instanceFred = MyClass["Fred", false];// create instance
var mything = instanceFred.internalValidate[];// call instance function
console.log[mything.check + ":" + mything.who];
var myBobthing = instanceBob.protoValidate[];
console.log[myBobthing.check + ":" + myBobthing.who];
Đã trả lời ngày 15 tháng 6 năm 2016 lúc 14:18Jun 15, 2016 at 14:18
Mark Schultheissmark SchultheissMark Schultheiss
31.1k11 Huy hiệu vàng69 Huy hiệu bạc96 Huy hiệu Đồng11 gold badges69 silver badges96 bronze badges
Tôi biết chủ đề này đã ở đây khá lâu nhưng tôi nghĩ rằng tôi cũng sẽ để lại 0,02 đô la của mình về cách gọi các chức năng bên trong từ bên ngoài phạm vi của họ [có thể có lợi cho ai đó].
Lưu ý rằng ở bất cứ nơi nào, một quyết định thiết kế tốt hơn nên được xem xét thay vì một số cách giải quyết hackish sẽ cắn bạn trở lại sau.a better design decision should be taken into consideration rather than some hackish workaround which will bite you back later.
Làm thế nào về việc sử dụng các biểu thức chức năng thay vì các câu lệnh chức năng và sử dụng phạm vi toàn cầu.
var innerFn;
function outerFn[] {
innerFn = function[number] {
return number ** 2;
}
}
outerFn[];
console.log[innerFn[5]];
// if there's more complex code around and you could write this defensively
if [typeof innerFn !== 'undefined'] {
console.log[`we are squaring the number 5 and the result is: ${innerFn[5]}`];
} else {
console.log['function is undefined'];
}
Hoặc, bạn có thể sử dụng các đóng cửa:
function outer[] {
// initialize some parameters, do a bunch of stuff
let x = 5, y = 10;
function inner[] {
// keeps references alive to all arguments and parameters in all scopes it references
return `The arithmetic mean of the 2 numbers is: ${[x + y] / 2}`;
}
return inner;
}
innerFn = outer[]; // get a reference to the inner function which you can call from outside
console.log[innerFn[]];
Đã trả lời ngày 11 tháng 6 năm 2019 lúc 5:55Jun 11, 2019 at 5:55
Marius Mucenicumarius MucenicuMarius Mucenicu
1.4752 huy hiệu vàng15 Huy hiệu bạc25 Huy hiệu đồng2 gold badges15 silver badges25 bronze badges
Tạo một biến bên ngoài hàm cha, sau đó trong hàm cha lưu trữ chức năng yêu cầu của bạn trong biến.
Var Store;
Function blah[] {
Function needed[] {
#
}
Store = needed;
}
Tomer Shetah
8.2237 Huy hiệu vàng23 Huy hiệu bạc34 Huy hiệu đồng7 gold badges23 silver badges34 bronze badges
Đã trả lời ngày 3 tháng 10 năm 2020 lúc 22:16Oct 3, 2020 at 22:16
Là một biến thể nhỏ của câu trả lời của Esailija, tôi đã làm điều này:
function initValidation[]
{
// irrelevant code here
function validate[_block]{
console.log[ "test", _block ];
}
initValidation.validate = validate;
}
initValidation[];
initValidation.validate[ "hello" ];
//test hello
0Vì vậy, xác thực [] hiện được chia sẻ hoàn hảo giữa createdetree [] và addnodes [], và hoàn toàn vô hình với thế giới bên ngoài.
Đã trả lời ngày 3 tháng 1 năm 2021 lúc 15:04Jan 3, 2021 at 15:04
Pete Lomaxpete LomaxPete Lomax
731 Huy hiệu bạc8 Huy hiệu đồng1 silver badge8 bronze badges
Nên làm việc.
function initValidation[]
{
// irrelevant code here
function validate[_block]{
console.log[ "test", _block ];
}
initValidation.validate = validate;
}
initValidation[];
initValidation.validate[ "hello" ];
//test hello
1Đã trả lời ngày 11 tháng 1 năm 2012 lúc 10:42Jan 11, 2012 at 10:42
OlicalolicalCarl Bergquist
37.7K12 Huy hiệu vàng55 Huy hiệu bạc76 Huy hiệu đồng2 gold badges24 silver badges42 bronze badges
7
Lệnh gọi này sẽ trả về tuyên bố chức năng, đó là xác thực chức năng. Vì vậy, bạn có thể gọi trực tiếp sau khi gọi đầu tiên.
function initValidation[]
{
// irrelevant code here
function validate[_block]{
console.log[ "test", _block ];
}
initValidation.validate = validate;
}
initValidation[];
initValidation.validate[ "hello" ];
//test hello
2Đã trả lời ngày 5 tháng 10 năm 2017 lúc 14:46
function initValidation[]
{
// irrelevant code here
function validate[_block]{
console.log[ "test", _block ];
}
initValidation.validate = validate;
}
initValidation[];
initValidation.validate[ "hello" ];
//test hello
3
Tôi biết đây là một bài viết cũ nhưng nếu bạn muốn tạo một tập hợp các phiên bản mà bạn muốn làm việc với việc sử dụng lại mã đó, bạn có thể làm điều gì đó như thế này:
Đã trả lời ngày 15 tháng 6 năm 2016 lúc 14:181 gold badge24 silver badges44 bronze badges
Mark Schultheissmark SchultheissFeb 14, 2020 at 10:25
31.1k11 Huy hiệu vàng69 Huy hiệu bạc96 Huy hiệu ĐồngShraddha J
Tôi biết chủ đề này đã ở đây khá lâu nhưng tôi nghĩ rằng tôi cũng sẽ để lại 0,02 đô la của mình về cách gọi các chức năng bên trong từ bên ngoài phạm vi của họ [có thể có lợi cho ai đó].9 silver badges16 bronze badges
function initValidation[]
{
// irrelevant code here
function validate[_block]{
console.log[ "test", _block ];
}
initValidation.validate = validate;
}
initValidation[];
initValidation.validate[ "hello" ];
//test hello
4
Lưu ý rằng ở bất cứ nơi nào, một quyết định thiết kế tốt hơn nên được xem xét thay vì một số cách giải quyết hackish sẽ cắn bạn trở lại sau.
Làm thế nào về việc sử dụng các biểu thức chức năng thay vì các câu lệnh chức năng và sử dụng phạm vi toàn cầu.22 gold badges71 silver badges93 bronze badges
Hoặc, bạn có thể sử dụng các đóng cửa:Dec 21, 2020 at 15:13
1