Tôi đang cố gắng gọi hàm mymethod từ trong một đối tượng nhưng không có cú pháp nào bên dưới hoạt động. Phải có một lỗi thực sự rõ ràng dưới đây nhưng tôi không thể nhìn thấy nó.
function MyObject[] {
//how do I get one of these to work??
this.MyMethod; //does not work
this.MyMethod[]; //does not work either
MyMethod[]; //does not work either
this.MyMethod = function [] {
alert['It works'];
}
}
var test = new MyObject[];
Haffax
5,8281 Huy hiệu vàng31 Huy hiệu bạc 30 Huy hiệu Đồng1 gold badge31 silver badges30 bronze badges
Hỏi ngày 22 tháng 8 năm 2010 lúc 11:44Aug 22, 2010 at 11:44
1
Có hai vấn đề chính
- Loại MIME là
text/javascript
, không phảitext/jscript
- Bạn đang xác định phương thức sau khi bạn cố gắng gọi nóafter you try to call it
So:
function MyObject[] {
this.MyMethod = function [] {
alert['It works'];
}
this.MyMethod[]; //should now work
}
var test = new MyObject[];
Gnarf
104K25 Huy hiệu vàng125 Huy hiệu bạc160 Huy hiệu đồng25 gold badges125 silver badges160 bronze badges
Đã trả lời ngày 22 tháng 8 năm 2010 lúc 11:47Aug 22, 2010 at 11:47
QuentinentinQuentin
880K121 Huy hiệu vàng1179 Huy hiệu bạc1289 Huy hiệu đồng121 gold badges1179 silver badges1289 bronze badges
0
Bạn đã thực hiện cuộc gọi đến phương thức riêng bên trong hàm tạo của lớp JavaScript. Vào thời điểm đó, các chức năng chưa được khởi tạo
Nhưng nếu bạn khởi tạo đối tượng như vậy:
var test = new MyObject[];
Và sau đó làm điều này:
test.myMethod[];
nó sẽ hoạt động.
Đã trả lời ngày 22 tháng 8 năm 2010 lúc 11:57Aug 22, 2010 at 11:57
Guy Schallerguy Schallerguy schaller
4.6104 Huy hiệu vàng31 Huy hiệu bạc54 Huy hiệu đồng4 gold badges31 silver badges54 bronze badges
2 cách xác định chức năng cung cấp khả năng truy cập khác nhau
Đầu tiên, đặt nó là thuộc tính của hàm cha, như được thực hiện trong phiên bản "A" của tập lệnh của bạn bên dưới. Nếu bạn làm điều này, chức năng chỉ có thể sử dụng sau khi bạn đưa ra định nghĩa.after you give the definition.
Thứ hai, xác định hàm với cách tiếp cận cổ điển của "function functionName [] {...}". Định nghĩa này trải qua "nâng", có nghĩa là chức năng sẽ có sẵn trong toàn bộ đối tượng cha, tức là ngay cả phía trên nơi nó được xác định. Bạn có thể thấy điều này trong phiên bản "B" trong mẫu dưới đây, dựa trên mã áp phích gốc. Cũng trên //jsfiddle.net/dnl4j30u/
function MyObject[] {
MyMethod[];
this.MyMethod = function[] {
console.log['It works A'];
}
this.MyMethod[];
MyMethod[];
function MyMethod[] {
console.log['It works B'];
}
}
var test = new MyObject[];
Đầu ra là
It works B [this works because the second definition gets hoisted]
It works A
It works B
Đã trả lời ngày 3 tháng 5 năm 2017 lúc 6:22May 3, 2017 at 6:22
EurekaeurekaEureka
3.53815 Huy hiệu bạc20 Huy hiệu đồng15 silver badges20 bronze badges
var MyObject = function MyObject[] {
this.MyMethod = function [] {
alert['It works'];
} }
var test = new MyObject[]; test.MyMethod[];
Trên đây sẽ làm. Hoặc bạn chỉ có thể tạo một hàm tạo và gọi phương thức này bên trong đó. Vì vậy, tại thời điểm tạo đối tượng, nó sẽ gọi đây là.mymethod []
Đã trả lời ngày 11 tháng 5 năm 2016 lúc 9:30May 11, 2016 at 9:30
binu.pybinu.pybinu.py
1.0372 huy hiệu vàng8 Huy hiệu bạc19 Huy hiệu đồng2 gold badges8 silver badges19 bronze badges
Tôi khá chắc chắn rằng bạn có thể xác định các phương thức ở bất cứ đâu trong tệp, ngay cả sau khi bạn gọi chúng, nhưng theo cách bạn đang xác định phương thức là lỗ hổng.
//ejohn.org/apps/learn/#5
Lưu ý rằng nếu bạn xác định một biến có hàm ẩn danh vì giá trị của nó thì bạn không thể gọi hàm theo tên [vì nó không có]. Thay vào đó bạn nên đặt tên nó bằng cách sử dụng quy ước
function nameOfTheFunction[ arguments ] {
...
}
Tôi thấy liên kết sau đây sẽ rất hữu ích:
//www.dustindiaz.com/javascript-function-declaration-ambiguity/
Đã trả lời ngày 7 tháng 11 năm 2010 lúc 4:46Nov 7, 2010 at 4:46
Sovasovasova
5.28010 Huy hiệu vàng40 Huy hiệu bạc48 Huy hiệu đồng10 gold badges40 silver badges48 bronze badges
1