console.log() 对象不记录通过原型在节点 js 控制台中添加的方法。或者如何打印原型?
console.log() an object does not log the method added via prototype in node js console. Or how to print the prototypes also?
function Person(name) {
this.name = name;
}
Person.prototype.getName = function() {
return this.name
}
var tinu = new Person('Tinu');
console.log(tinu.getName()) //Prints the name 'Tinu' - Expected, means the function is added to protoype
console.log(tinu);
最后的console.log()不通过点原型打印新添加的名为'getName'的方法,只打印属性'name',这里我希望在 Person 对象中同时打印 属性 'name' 和方法 'getName' 。以下是上述代码的实际输出和期望输出:
实际产量
蒂努
人物{姓名:'Tinu'}
期望输出
蒂努
Person { name: 'Tinu', getName: [Function] }
下图显示了另一个示例,其中通过原型添加的方法 'getFullName' 在打印时正确显示以控制添加它的对象。并期待与我的示例相同
在 chrome 开发工具中,如果您单击展开图标,您可以在 __proto__
中看到原型属性:
你可以看到那里定义了getName()
。这是放置它的合适位置,因为它是原型的 属性,而不是 person 对象本身。
console.log
是由您的 js 环境提供的 API(在您的情况下为 Node.js)。没有标准规格。所以在你的情况下 console.log
打印你的 Javascript-object.
的简单字符串表示
{ propName: propValue }
在 Node.js 中有一个实用程序模块 (util-documentation)。此外,我找到了一种方法,它 returns 对象的所有属性,包括原型链的所有属性。
const util = require('util')
function Person(name) {
this.name = name;
}
Person.prototype.getName = function() {
return this.name
}
var tinu = new Person('Tinu');
console.log(util.inspect(tinu, {showHidden: false, depth: null}))
function getAllPropertyNames(obj) {
var props = [];
do {
Object.getOwnPropertyNames(obj).forEach(function (prop) {
if (props.indexOf(prop) === -1 ) {
props.push( prop );
}
});
} while (obj = Object.getPrototypeOf(obj));
return props;
}
console.log(getAllPropertyNames(tinu));
/*
[ 'name',
'constructor',
'getName',
'__defineGetter__',
'__defineSetter__',
'hasOwnProperty',
'__lookupGetter__',
'__lookupSetter__',
'isPrototypeOf',
'propertyIsEnumerable',
'toString',
'valueOf',
'__proto__',
'toLocaleString' ]
*/
如果您使用的是 浏览器 并希望查看已定义的方法和其他信息,您可以使用浏览器的开发人员工具。按F12
,你可以做很多调查。
function Person(name) {
this.name = name;
}
Person.prototype.getName = function() {
return this.name
}
var tinu = new Person('Tinu');
console.log(tinu.getName()) //Prints the name 'Tinu' - Expected, means the function is added to protoype
console.log(tinu);
最后的console.log()不通过点原型打印新添加的名为'getName'的方法,只打印属性'name',这里我希望在 Person 对象中同时打印 属性 'name' 和方法 'getName' 。以下是上述代码的实际输出和期望输出:
实际产量
蒂努
人物{姓名:'Tinu'}
期望输出
蒂努
Person { name: 'Tinu', getName: [Function] }
下图显示了另一个示例,其中通过原型添加的方法 'getFullName' 在打印时正确显示以控制添加它的对象。并期待与我的示例相同
在 chrome 开发工具中,如果您单击展开图标,您可以在 __proto__
中看到原型属性:
你可以看到那里定义了getName()
。这是放置它的合适位置,因为它是原型的 属性,而不是 person 对象本身。
console.log
是由您的 js 环境提供的 API(在您的情况下为 Node.js)。没有标准规格。所以在你的情况下 console.log
打印你的 Javascript-object.
{ propName: propValue }
在 Node.js 中有一个实用程序模块 (util-documentation)。此外,我找到了一种方法,它 returns 对象的所有属性,包括原型链的所有属性。
const util = require('util')
function Person(name) {
this.name = name;
}
Person.prototype.getName = function() {
return this.name
}
var tinu = new Person('Tinu');
console.log(util.inspect(tinu, {showHidden: false, depth: null}))
function getAllPropertyNames(obj) {
var props = [];
do {
Object.getOwnPropertyNames(obj).forEach(function (prop) {
if (props.indexOf(prop) === -1 ) {
props.push( prop );
}
});
} while (obj = Object.getPrototypeOf(obj));
return props;
}
console.log(getAllPropertyNames(tinu));
/*
[ 'name',
'constructor',
'getName',
'__defineGetter__',
'__defineSetter__',
'hasOwnProperty',
'__lookupGetter__',
'__lookupSetter__',
'isPrototypeOf',
'propertyIsEnumerable',
'toString',
'valueOf',
'__proto__',
'toLocaleString' ]
*/
如果您使用的是 浏览器 并希望查看已定义的方法和其他信息,您可以使用浏览器的开发人员工具。按F12
,你可以做很多调查。