當我運行下面的代碼時,我被告知,這個通話不是一個函數。 爲什麼?不是一個功能?
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()
編輯:
相關的JavaScript技術講座: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
現在是true。
+1,打敗了我,雖然你應該解釋爲什麼這個工程,而OP的版本不。 – RMorrisey 2012-03-16 22:07:13
我也是+1,以及我要發佈的示例代碼是相同的:)(char爲char)。 – pete 2012-03-16 22:09:25
@Rorrisey,是的,那是真的。我正在尋找我剛剛發佈的技術講座,以驗證我要說的任何事情。我仍然可能不會這麼做,但我會在一秒之內發佈。 – mowwwalker 2012-03-16 22:16:24
爲了使你的代碼工作的期望,你會寫:
function Cat(name) {
this.talk = function() {
alert(" say meeow!")
}
};
var c = new Cat("felix");
c.talk()
功能Cat
是那麼構造功能,並且返回的對象有一個屬性(talk
),這是一個函數,你可以打電話。
你原來的代碼實際上宣佈全球功能talk
這是不是cat
功能的一部分可言,因爲它缺少了var
關鍵字。
這只是因爲它不是。
您已創建一個函數並將其分配給cat
函數中的變量,但該變量不屬於該函數。因爲你沒有在任何地方聲明變量,它隱含地變成了全局變量,所以它實際上在函數外部是可用的,但不是你嘗試使用它的方式。
你將不得不添加的功能屬性的cat
函數對象,爲了讓你能夠調用它的方式:
function cat(name) {
cat.talk = function() {
alert(" say meeow!")
}
}
cat("felix");
cat.talk()
然而,你可能會尋找一個對象,有一個方法,而不是一個屬性是一個方法的函數:
function Cat(name) {
this.name = name;
}
Cat.prototype.talk = function() {
alert(this.name + " says meeow!");
}
var felix = new Cat("Felix");
felix.talk();
你試圖做一個類'貓',或定義一個對象有一個函數說話嗎? – 2012-03-16 22:06:51