2
var Person = function(name){
    this.name = name;
};
console.log("1 " + typeof(Person.prototype)) //"object" - prototype is a property of a first class functional object

Person.prototype.sayhi = function(){console.log("hi")};

var john = new Person();

console.log("2 "+typeof(Person.sayhi)) // "undefined"
console.log("3 "+typeof(john.sayhi))// "function"

我试图更好地理解 javascript 原型。

我想知道为什么案例 2 返回未定义,而案例 3 返回“对象”。

我阅读了其他帖子,但似乎找不到答案。谢谢。

4

2 回答 2

1

附加到原型 ( Person.prototype) 的函数不能从构造函数 ( Person) 访问,即Person.sayhi根本不尝试访问原型。

当你调用构造函数(比如var p = new Person())时,Person.prototype它会附加到创建对象的原型链(p),这就是你可以调用p.sayhi(). 但是,sayhi从不附加到构造函数

于 2013-02-13T22:06:27.157 回答
0

因为您的“2”console.log 没有查看原型:

Person.sayHi = function() { console.log('I am not in an instance'); }
console.log(typeof(Person.sayHi)); //"function"
var john = new Person();
console.log(typeof(john.sayHi)); //"undefined"

不同于:

Person.prototype.sayHi = function() { console.log('Hi'); }
console.log(typeof(Person.sayHi)); //"undefined"
console.log(typeof(Person.prototype.sayHi)); //"function"
var john = new Person();
console.log(typeof(john.sayHi)); //"function"

c#/java中静态方法和实例方法的区别

于 2013-02-13T22:07:00.433 回答