我有这段代码,我想知道为什么boy.new2
未定义?
Object.prototype.new1 = 'h1';
Function.prototype.new2 = 'h2';
function person(){
}
var boy = new person();
console.log(boy.new1); //h1
console.log(boy.new2); //undefined
答案 0 :(得分:4)
由于boy
不是Function
个实例,因此它不会从Function.prototype
继承:
boy instanceof Function; // false
原型链是:
boy
继承自person.prototype
。person.prototype
继承自Object.prototype
。Object.prototype
继承自null
。如果您希望person
个实例从Function.prototype
继承,则可以执行
person.prototype = Object.create(Function.prototype);
person.prototype.constructor = person; /* optional */
Object.prototype.new1 = 'h1';
Function.prototype.new2 = 'h2';
function person(){}
person.prototype = Object.create(Function.prototype);
person.prototype.constructor = person; /* optional */
var boy = new person();
document.body.innerHTML =
boy.new1 // "h1"
+ '<br />'
+ boy.new2 // "h2"
;
现在的典型链是:
boy
继承自person.prototype
。person.prototype
继承自Function.prototype
。Function.prototype
继承自Object.prototype
。Object.prototype
继承自null
。答案 1 :(得分:2)
因为函数调用的结果不是函数,所以它是一个对象。
(function() {}).new2
会在您引用函数而不是结果对象时产生预期结果。
Function.prototype.logger = console.log.bind(console);
(function foo() {}).logger('hello world'); // logs 'hello world'
编辑:是的,我意识到输出没有显示记录:P oops。你必须打开你的控制台才能看到这项工作。
答案 2 :(得分:0)
试试这个:
console.log(typeof boy);
boy var是一个Object,而不是一个Function