Với đoạn mã sau
var car = class Car{ /* ... */ }
var carNew = new Car("ferrari");
throws an error, why?
Car
chưa bước vào phạm vi vì bạn đã viết một biểu thức lớp, tương tự như sử dụng function
trong một biểu thức chức năng
var foo = function Bar() {};
foo; // defined
Bar; // undefined
var carNew = new car("ferrari");
works, why?
Đối với lập luận tương tự như trên, các định danh car
được định nghĩa trong phạm vi và số điểm đó để biểu thức lớp
What is use of named or unnamed class expression [...]?
Hãy nhìn lại một lần nữa function
. Vì vậy, bây giờ nghĩ rằng, nếu Bar
không được xác định trong phạm vi chúng tôi đang làm việc, nó được xác định ở đâu?
Vâng, rõ ràng là chúng tôi có foo.name === 'Bar'
, nhưng chúng tôi cũng có thể làm
var foo = function Bar() {console.log(Bar)};
foo(); // Bar logged, we see Bar === foo here
Tuyệt vời, vì vậy chúng tôi có thể tham khảo Bar
bên trong chức năng.
Nó là giống hệt nhau với class
, chúng ta có thể tham khảo Car
từ bên trong biểu thức lớp bản thân, cho phép chúng ta làm những hành vi đệ quy hoặc sao chép tài liệu tham khảo tĩnh để các trường hợp, vv
Tôi đã thêm một tham chiếu như vậy để giúp dễ dàng xem trong mã bên dưới
var car = class Car {
constructor(model) {
this.model = model;
this.foo = Car; // the big C Car that was ReferenceErroring outside
}
};
var bar = new car();
console.log(bar.foo); // logs class Car (=== car)
lỗi gì được ném? – Amit
Uncaught ReferenceError: Ô tô không được định nghĩa –
ở trên mã sẽ không ném một lỗi nếu sử dụng tên lớp là "Xe hơi", sau đó chỉ nó sẽ ném lỗi. Tôi muốn hiểu việc sử dụng biểu thức lớp được đặt tên và chưa được đặt tên là gì? chúng ta cần sử dụng biểu thức lớp có tên là –