Không trừ khi bạn đặt tất cả các biến là "công khai", tức là biến chúng thành thành viên Function
trực tiếp hoặc thông qua thuộc prototype
tính.
var C = function( ) {
this.x = 10 , this.y = 20 ;
this.modify = function( ) {
this.x = 30 , this.y = 40 ;
console.log("(!) C >> " + (this.x + this.y) ) ;
} ;
} ;
var A = function( ) {
this.modify = function( ) {
this.x = 300 , this.y = 400 ;
console.log("(!) A >> " + (this.x + this.y) ) ;
} ;
} ;
A.prototype = new C ;
var B = function( ) {
this.modify = function( ) {
this.x = 3000 , this.y = 4000 ;
console.log("(!) B >> " + (this.x + this.y) ) ;
} ;
} ;
new C( ).modify( ) ;
new A( ).modify( ) ;
new B( ).modify( ) ;
Bạn sẽ nhận thấy một vài thay đổi.
Quan trọng nhất là lời gọi đến hàm tạo "siêu lớp" được cho là ẩn trong dòng này:
<name>.prototype = new C ;
Cả hai A
và B
bây giờ sẽ có các thành viên có thể sửa đổi riêng lẻx
và y
sẽ không đúng như vậy nếu chúng tôi viết thư ... = C
thay thế.
Sau đó, x
, y
và modify
được tất cả các thành viên "công cộng" để gán một khác nhau Function
đối với họ
<name>.prototype.modify = function( ) { }
sẽ "ghi đè" bản gốc Function
bằng tên đó.
Cuối cùng, lệnh gọi đến modify
không thể được thực hiện trong Function
khai báo vì lệnh gọi ngầm định tới "siêu lớp" sau đó sẽ được thực thi lại khi chúng ta đặt "siêu lớp" được cho là thuộc prototype
tính của "lớp con" được cho là.
Nhưng tốt, đây ít nhiều là cách bạn thực hiện loại điều này trong JavaScript.
HTH,
FK
modify
không phải là một phương pháp nhưng một hàm lồng nhau - có sự khác biệt giữa hai ...