Tại sao trong đoạn code javascript của mình xuất kết quả sai

/*

  1. Xây dựng lớp điểm trong không gian 2 chiều Oxy gồm 2
    thành phần hoành độ và tung độ là các số nguyên. Xây
    dựng phương thức khởi tạo 2 tham số.

  2. Xây dựng lớp điểm trong không gian 3 chiều Oxyz kế
    thừa từ lớp điểm 2 chiều với phương thức khởi tạo ba
    tham số.
    */.

     "use strict";
     try {
    
     	function Point2D() {
     		this._x = 0;
     		this._y = 0;
     		
     		if (arguments.length == 2) {
     			this._x = arguments[0];
     			this._y = arguments[1];
     		}
     			
     		this.print = function () {
     			console.log("x = " + this._x + "\ny = " + this._y);
     		};
     	}
     	
     	function Point3D() {
     		this._z = 0;
     		
     		if (arguments.length == 3) {
     			Point2D.call(this, arguments[0], arguments[1]);
     			this._z = arguments[2];
     		}
     	}
     	
     	Point3D.prototype = new Point2D();
     	Point3D.prototype.constructor = Point3D;
     	
     	Point3D.prototype.print = function () {
     		var point2D = new Point2D();
     		point2D.print.call(this);
     		console.log("z = " + this._z);
     	};
     	//
     	var point3D1 = new Point3D();
     	point3D1.print(); 
     	
     	var point3D2 = new Point3D(3, 4, 5);
     	point3D2.print(); // dòng này xuất kết quả bị sai
     	//
     } catch (exception) {
     	console.log(exception);
     }

Đoạn code của bạn gọi 2 hàm print khác nhau.
3D1 không có args nên nó gọi 3D.prototype.print.
Trong khi 3D2 có 3 args, thỏa mãn if nên nó gọi 2D.print, ở 2D.print bạn chỉ in ra x, y. Không in ra z nên không xuất hiện z.

mình hiểu rồi, cảm ơn bạn rất nhiều!
mình đang học OOP javascript nhưng ko tìm được bài tập mẫu để tham khảo, trong sách chỉ có ví dụ đơn giản thôi. Bạn có bài tập mẫu ko cho mình xin với!
Chủ yếu mình muốn đọc code để xem cách xử lí như thế nào

Đọc you don’t know js nhé.

cảm ơn bạn. :smiley:

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?