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 Functiontrực tiếp hoặc thông qua thuộc prototypetí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 Avà Bbây giờ sẽ có các thành viên có thể sửa đổi riêng lẻx và ysẽ không đúng như vậy nếu chúng tôi viết thư ... = Cthay thế.
Sau đó, x, yvà 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 Functionbằng tên đó.
Cuối cùng, lệnh gọi đến modifykhông thể được thực hiện trong Functionkhai 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 prototypetí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
modifykhô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 ...