不是一个功能?
当我运行下面的代码时,我被告知,这个通话不是一个函数。 为什么?不是一个功能?
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