다음 코드를 실행하면 해당 대화는 기능이 아닙니다. 왜?기능이 없습니까?
function cat(name) {
talk = function() {
alert(" say meeow!")
}
}
cat("felix");
cat.talk()
다음 코드를 실행하면 해당 대화는 기능이 아닙니다. 왜?기능이 없습니까?
function cat(name) {
talk = function() {
alert(" say meeow!")
}
}
cat("felix");
cat.talk()
당신이하려는 것은 함수가 생성자 인 객체를 만드는 것이지만 실제로 코드가 수행하는 것은 변수 talk
을 함수로 설정하는 것입니다. 당신이 원하는 :
function cat(name) {
this.talk = function() {
alert(" say meeow!")
}
}
var myCat = new cat("felix");
myCat.talk()
편집 :
관련 자바 스크립트 기술 토론 : http://www.youtube.com/watch?v=ljNi8nS5TtQ
그는에서 약 30 분 기능을 가진 객체를 구성에 대해 이야기 코드 그는 게시물은 다음과 같습니다.
function Circle(radius){
this.radius = radius;
this.area = function(){
return this.radius * this.radius * Math.PI;
};
}
var instance = {};
Circle.call(instance, 5);
instance.area(); // ==> 78.5398
var instance2 = new Circle(5);
instance2.area() // ==> 78.5398
instance instanceof Circle // ==> false
instance2 instanceof Circle // ==> true
및 관련 인용문 :
새로운 키워드 그냥 즉
을 "새로운 키워드가 의미 다른 이 없습니다 ... 새로운 객체 을 만들고 그 위에 생성자를 호출"라고하는 속기, 그가 말하는 때 new
키워드를 사용하면 변수를 객체로 정의하고 해당 객체의 컨텍스트에서 함수를 호출합니다 (this
이 객체를 가리킴).
new
키워드가 추가로하는 것은 새로 생성 된 개체의 프로토 타입을 생성자의 프로토 타입으로 설정하는 것입니다. 그래서 만약 우리가 할 :
function Circle(radius){
this.radius = radius;
this.area = function(){
return this.radius * this.radius * Math.PI;
};
}
var instance = {};
Circle.call(instance, 5);
instance.__proto__ = Circle.prototype; // we set the prototype of the new object to that of the constructor
instance.area(); // ==> 78.5398
var instance2 = new Circle(5);
instance2.area() // ==> 78.5398
instance instanceof Circle // ==> true // this is now true
instance2 instanceof Circle // ==> true
instance instanceof Circle
것은 지금 사실이다. 당신이 작성해야 원하는대로
+1, 내가 왜이 작품의 이유를 설명해야하고 OP의 버전은 그렇지 않습니다. – RMorrisey
+1 나와 마찬가지로, 게시 할 예제 코드는 동일했습니다 :) (char for char). – pete
@R 모리스, 네, 맞습니다. 내가 방금 말했던 것을 검증하기 위해 올린 기술 토론을 찾고있었습니다. 나는 아직도 많은 정의를하지는 않겠지 만, 나는 그것을 두 번째에 게시 할 것이다. – mowwwalker
은 당신의 코드가 작동하게하려면
function Cat(name) {
this.talk = function() {
alert(" say meeow!")
}
};
var c = new Cat("felix");
c.talk()
기능 Cat
은 다음 생성자 기능이며, 반환 된 객체는 속성 (talk
)가 함수 인 것을 전화해도됩니다.
원래 코드는 실제로는 var
키워드 누락 된 이후, 전혀 cat
기능의 일부가 아니 었 글로벌 기능 talk
를 선언했다.
그것은 단순히 그렇지 않기 때문입니다.
cat
함수에서 함수를 만들고 변수에 할당했지만 해당 변수가 함수에 속하지 않습니다. 변수를 어디에서나 선언하지 않으므로 암시 적으로 전역 변수가되므로 함수 외부에서 실제로 사용할 수 있지만 사용하려고하는 방식이 아닙니다.
cat
함수 객체에 속성으로 기능을 추가해야
그러나
function cat(name) {
cat.talk = function() {
alert(" say meeow!")
}
}
cat("felix");
cat.talk()
, 당신은 객체를 찾고 수 있습니다 그 메소드가되는 속성을 가진 함수가 아닌 메소드를 가지고 있습니다 :
클래스'cat'을 만들려고 했습니까? –