2014-10-01 22 views
13

Như tôi đã hiểu, trong JavaScript, mọi đối tượng đều có prototype và nó hiển thị một số thuộc tính mặc định. Tôi có đoạn mã sau đây nơi tôi đang cố gắng thiết lập thuộc tính Năm của hai đối tượng thông qua prototype. Nhưng cả hai cuộc gọi đều thất bại.Truy cập nguyên mẫu đối tượng Javascript

Làm cách nào để ghi đè toLocalString() cho bất kỳ đối tượng nào nếu tôi không có quyền truy cập vào prototype? Xin lưu ý rằng mã sau đây là để kiểm tra trên tài sản prototype, nhưng ý định của tôi là ghi đè phương thức toLocalString().

var car = { 
    Make: 'Nissan', 
    Model: 'Altima' 
}; 

car.Year = 2014; 
alert(car.Year); 

alert(car.prototype); // returns undefined 

car.prototype.Year = 2014; // Javascript error 

// -------------- 

function Car() { 
    this.Make = 'NISSAN'; 
    this.Model = 'Atlanta'; 
} 

var v = new Car(); 
v.prototype.Year = 2014; // JavaScript error 
alert(v.prototype); 
+1

Trong ví dụ dưới cùng của bạn, nó phải là 'Car.prototype.Year = 2014' - bạn thiết lập nguyên mẫu trên hàm đối tượng - không phải là cá thể đã tạo. – tymeJV

+0

Bạn có nghĩa là 'toLocaleString()' thay vì 'toLocalString()' hay bạn muốn thực hiện phương thức của riêng bạn 'toLocalString()'? – pasty

+0

Vui lòng xem [câu trả lời] (http://stackoverflow.com/a/26149216/1841194) –

Trả lời

6

Bạn có quyền truy cập vào thuộc tính mẫu thử nghiệm, nhưng nó chỉ xuất hiện trên Function s.

var car = { 
    Make: 'Nissan', 
    Model: 'Altima' 
}; 

Đây là giống như:

var car = new Object(); 
car.Make = 'Nissan'; 
car.Model = 'Altima'; 

Vì vậy, car.__proto__ === Object.prototype.

car.prototype === undefined làm thuộc tính prototype chỉ xuất hiện trên Function s (như tôi đã nói).

function Car() { 
    this.Make = 'NISSAN'; 
    this.Model = 'Atlanta'; 
} 

Đây Car.prototype điểm đến một instance của ObjectCar là một chức năng và khi khai báo chức năng được đánh giá họ prototype được thiết lập để một thể hiện của Object.

Car.prototype.Year = 2014; //all Car *instances* will have a Year property set to 2014 on their prototype chain. 

var c = new Car(); //create an instance 
console.log(c.Year); //2014 

Trọng một phương pháp có mặt trên chuỗi nguyên mẫu cho một đối tượng cũng đơn giản như việc tạo ra một phương pháp tương ứng trên đối tượng:

var myObject = new Object(); 
myObject.toLocaleString = function() { 
    //my own implementation 
}; 
5

Bạn có thể muốn thay đổi chức năng xây dựng nguyên mẫu:

function Car(year, make, model) { 
    this.year = year; 
    this.make = make; 
    this.model = model; 
} 

Car.prototype.toLocaleString = function() { 
    return [this.year, this.make, this.model].join(' '); 
}; 

var civic = new Car(2014, 'Honda', 'Civic'); 
civic.toLocaleString(); // => "2014 Honda Civic" 

MDN article on Object.prototype này có thể hữu ích.

Các vấn đề liên quan