对于以下代码,
31-Aug-2015 22:44:04.592 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.endorsed.dirs=/Users/lhuang/dev/servers/apache-tomcat-8.0.20/endorsed
31-Aug-2015 22:44:04.592 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.base=/Users/lhuang/Library/Caches/IntelliJIdea14/tomcat/Tomcat_8_0_20_FileStorageService_2
31-Aug-2015 22:44:04.592 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.home=/Users/lhuang/dev/servers/apache-tomcat-8.0.20
下面是我对可视化上述代码表示的理解,
对于以下代码,
function Employee() {
this.name = "";
this.dept = "general";
}
下面是我对可视化上述代码表示的理解,
以上图表是否是此Javascript代码创建的原型链的准确表示?
注意:Javascript初学者
答案 0 :(得分:4)
第一个看起来很好(除了可能是丑陋的图形,但这不是问题)。如果您关心UML,则不应将__proto__
1 和prototype
放在一起,而应放在另一个之上。
另外,注意Employee
构造函数没有.name
2 和.dept
属性非常重要。 new Employee
实例会有这些。
在第二种情况下,还有一些错误:
Manager
函数没有reports
属性。 new Manager
个实例会有name
,dept
和reports
个属性。Manager.prototype
,而不是Employee.prototype
(其中有两个)。当然,这只是一个标签问题,但对于精确引用图形仍然很重要。Manager.prototype
' __proto__
不是Object.prototype
,而是Employee.prototype
- 您使用的是Object.create
Object.create(…)
}。for。Manager.prototype
不应该标记箭头,而应标记对象本身(当然这更像是一种风格问题,你不能使用spec,对吗? )constructor
没有Employee.prototype
属性。它确实继承了Manager
中的那个。您应该考虑在代码中创建一个,请参阅Why is it necessary to set the prototype constructor?。然后它会指向__proto__
。 1:实际上,Object.prototype
是Object.set/getPrototypeOf
对象上的getter / setter属性。真实的内部原型链接(只能通过Employee
访问)通常被指定为 [[prototype]] 。
2:事实上,public class Contact
{
[Key,ForeignKey("Student")]
public int StudentId { get; set; }
public virtual Student Student { get; set; }
}
函数确实有.name
property,但没有你想要的那个。