2012-06-09 22 views
6

Tôi đang thực hiện một hướng dẫn JavaScript và tôi có thể hoàn thành nó. Nhưng vấn đề là tôi không hiểu những gì một trong những dòng đang làm. Tôi có một hàm setAge() và sau đó sau khi tạo đối tượng susan tôi đặt một trong các thuộc tính cho đối tượng đó làm tên của hàm? Tôi không hiểu tại sao điều này được thực hiện. Tôi sẽ không thể sử dụng chức năng/phương pháp mà không làm điều này?Noob Quan tâm: Việc sử dụng chức năng JavaScript

Mã hướng dẫn:

var setAge = function (newAge) { 
    this.age = newAge; 
}; 

var susan = new Object(); 
susan.age = 25; 
susan.setAge = setAge; //how the hell does this work? 

// here, update Susan's age to 35 using the method 
susan.setAge(35); 

Trả lời

8

Nó gán susan 's tài sản setAge đến chức năng định nghĩa trên,

function (newAge) { 
    this.age = newAge; 
}; 

mà là một chức năng chấp nhận một đối số. Khi susan.setAge(35); được gọi, this sẽ giới thiệu đến người gọi, susan, cập nhật tuổi của cô đến 35.

Sự nhầm lẫn có thể là từ setAge được sử dụng hai lần. Hàm của Susan được xác định ở phía bên trái, phía bên phải đã được xác định. Ví dụ:

susan.letMyAgeBe = setAge; 
susan.letMyAgeBe(35); 

hoạt động tương tự. setAge cũng là "tái sử dụng":

harry = new Object(); 
harry.iAmThisOld = setAge; 
harry.iAmThisOld(55); 

Demohttp://jsfiddle.net/7JbKY/2/

-1

đây là một vấn đề phạm vi và đóng cửa. Để biết thêm thông tin về điều này, tôi khuyên bạn nên đọc bài viết này: http://nesj.net/blog/2012/03/javascript-scope-and-closure/

+0

Câu hỏi này không liên quan đến phạm vi hoặc đóng cửa. Đó là về thực tế là các hàm là các đối tượng giống như bất kỳ thứ gì khác trong javascript. Như vậy chúng có thể được chuyển thành các tham số, được gán cho các biến, v.v. – jatrim

0

Nó hoạt động vì phạm vi biến.

Biến đầu tiên setAge chỉ là một chức năng và bạn có thể gọi nó như: setAge(24) Nó không quá nhiều khác biệt so với function setAge(age) {this.age = age}

Sau khi bạn khai báo biến setAge và đặt nó là nội dung vào một chức năng, bạn có thể đặt một biến cho biến này. Những gì bạn đang làm trong đối tượng chỉ là điều này. Sau khi bạn viết susan.setAge = setAge; thuộc tính setAge của đối tượng của bạn sẽ bằng biến setAge trước đó là một hàm. Vì vậy, bạn có thể gọi susan.setAge().

0

hãy xem những gì được thực hiện trong số-

var setAge = function (newAge) { 
    this.age = newAge; 
}; 

đây là một chức năng được xác định mà sẽ thay đổi tuổi biến một đối tượng được chỉ định trong khi gọi hàm.

var susan = new Object(); 
susan.age = 25; 
susan.mynewageis = setAge; 

ở đây chúng tôi đang thiết lập một giá trị được xác định trước để susan.age mà sẽ được thay đổi bởi các chức năng và chúng tôi đang thiết lập các giá trị của hàm để susan.mynewageis biến để thực hiện các chức năng có sẵn thời gian tiếp theo trong bất kỳ trường hợp khác .

susan.mynewageis(35); 

ở đây chúng tôi đang đặt giá trị của susan.age thành 35 như được chỉ định khi gọi hàm.

Tôi sẽ đăng câu trả lời này nhưng do nhầm lẫn tôi nhấn nút gửi và đăng câu trả lời chưa hoàn chỉnh.

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