winchill如何js object 增加属性part属性

【原文地址】
【原文发表日期】
继,在这篇博客中,我们会更加详细的讨论一下关于实例属性(Instance Properties)和实例方法(Instance Methods),静态属性(Class Properties)和静态方法(Class Methods)。
我仍然会使用上一篇博客中用的例子,并且对它进行一些必要的修改。
function Rectangle (ht, wt) {
&&&&&&&&&&&&&&& this.height =
&&&&&&&&&&&&&&& this.width=
Rectangle.prototype.area = function() {return this.height * this.}
var rect1 = new Rectangle(5,10);
var rect2 = new Rectangle(2,4);
var rect1Area = rect1.area(); // rect1.area() will return 50.
var rect2Area = rect2.area(); // rect2.area() will return 8.
上面的代码是通过定义一个构造器函数(constructor function)定义了一个Rectangle类。Rectangle包含了两个属性height和width,同时它还通过它的prototype对象定义了area方法。
在上面的例子中,每个Rectangle对象都有属于自己的width和height拷贝。这些属性通过拥有它们的对象实例来访问它们,比如rect1的height属性可以被赋值给rect2的height:
rect2.height = rect1.
上面的代码演示了属性如何被与它们关联的对象读写。这些属性,我们都称它为实例属性(Instance Properties)。
那area方法又是什么呢?它同样也是通过Rectangle的实例访问的,我们称之为实例方法(Instance Method)。
实例方法与实例属性除了两点不同外,其它的特性都一样。第一点不同是,一个方法可以返回多个值。另外一个不同之处在于,并不是所有的实例中都包含有实例方法的拷贝。实例方法可以通过this关键字来引用到当前对象的实例(译注:这里的this与C#中的this起用相似的作用。)。
实例属性和实例方法都只能通过对象的实例来引用。
那么我们再来看一种情况,通过下面的代码添加一个实例方法,将会发生什么事情呢?
rect1.area = function() {return ½ * this.height * this.}
它是怎样影响rect1的?它会影响所有的Rectangle对象的实例吗?
要回答这些问题,必须要了解Jscript读写实例属性上的不同规则。
当我们要去读取一个实例(比如rect1)属性(比如:area)时,Jscript解析器会先去检查一下在实例(rect1)上是否已经有定义了这个属性(area)。(译注:有则直接使用,不再进行下面的检查,下面步骤如是。)
如果实例里没有定义这个属性,Jscript解析器会再去检查判断构造器函数(Rectangle)对应的prototype对象是否有定义了这个属性(area)。
如果还是没有,那么Jscript解析器会再去检查构造器函数(Rectangle)对应的prototype对象的构造器函数(Rectangle.prototype.constructor.prototype),直到Object为止。(译注:如果这样一个查找顺序下来还找不到的话,才返回#ff0000)。
当我们试图往对象上写(添加)一个属性时,如果当前的对象上并不存在一个相同名字的属性时,Jscript会在当前的对象上添加这个属性(译注:有存在当然是重新赋值了)。所以此时这个对象(rect1)就拥有了自己的area属性。Jscript在调用属性时将不会再去查找构造器函数(Rectangle)的prototype对象了。
继续解释上面关于属性的读取。当以后(新添加了area以后),再调用当前对象再调用area 属性时(rect1.area())时,始终调用的都是调用了当前对象中新添加的属性,而不是prototype中定义的相同名称的属性。但是,无论什么时候我们调用其它对象的相同属性时,都不会受到这个对象的影响,仍然是调用prototype对象中的area方法。
总结一下,对象实例中定义的属性会覆盖prototype对象上相同名称的属性,但是只是对于当前实例而言的(rect1.area覆盖Rectangle.prototype.area,只影响rect1)。其它实例并不会受到影响。
同样是上面的例子。我想要通过一个标准值而区分当前矩形的大小。任何面积小于10的矩形,我们都认为是小矩形,否则就认为是大矩形。
此时,我可以这样定义一个属性:
Rectangle.MINBIGSIZE = 10;
MINBIGSIZE是在构造器函数(类)上定义的一个属性,而不是在实例或prototype对象上。像这样的例子,我们就称它为静态属性(类属性).
静态属性是与类本身相关的,而不是类的对象。不管有多少上对象实例被创建,始终都只有一份静态属性的拷贝。这种属性的访问通过类来完成的。
为了要区分出矩形的大小,我定义type方法来判断:
Rectangle.type = function (obj) {
&&&&&&&&&&&&&&& var retT
&&&&&&&&&&&&&&& obj.area()&Rectangle.MINBIGSIZE ? retType="SMALL" : retType="BIG";
&&&&&&&&&&&&&&&
与MINBIGSIZE一样,type方法也是定义在构造器函数上,这种方法我们则类似的称之为静态方法(类方法)。静态方法就是一个做为构造器函数的一个属性的函数。一个静态方法是与类本身相关联的,而不是类的对象。
上面设计的定义我们可以这样调用:
Rectangle.type(rect1); // would return BIG.
这就是实例属性/方法和静态属性/方法的完整介绍。在下一篇博客中,我将会来讨论关于数据的封装和继承。
希望这篇博客对你有益,也希望你能喜欢。
SDET, JScript&Team.新手园地& & & 硬件问题Linux系统管理Linux网络问题Linux环境编程Linux桌面系统国产LinuxBSD& & & BSD文档中心AIX& & & 新手入门& & & AIX文档中心& & & 资源下载& & & Power高级应用& & & IBM存储AS400Solaris& & & Solaris文档中心HP-UX& & & HP文档中心SCO UNIX& & & SCO文档中心互操作专区IRIXTru64 UNIXMac OS X门户网站运维集群和高可用服务器应用监控和防护虚拟化技术架构设计行业应用和管理服务器及硬件技术& & & 服务器资源下载云计算& & & 云计算文档中心& & & 云计算业界& & & 云计算资源下载存储备份& & & 存储文档中心& & & 存储业界& & & 存储资源下载& & & Symantec技术交流区安全技术网络技术& & & 网络技术文档中心C/C++& & & GUI编程& & & Functional编程内核源码& & & 内核问题移动开发& & & 移动开发技术资料ShellPerlJava& & & Java文档中心PHP& & & php文档中心Python& & & Python文档中心RubyCPU与编译器嵌入式开发驱动开发Web开发VoIP开发技术MySQL& & & MySQL文档中心SybaseOraclePostgreSQLDB2Informix数据仓库与数据挖掘NoSQL技术IT业界新闻与评论IT职业生涯& & & 猎头招聘IT图书与评论& & & CU技术图书大系& & & Linux书友会二手交易下载共享Linux文档专区IT培训与认证& & & 培训交流& & & 认证培训清茶斋投资理财运动地带快乐数码摄影& & & 摄影器材& & & 摄影比赛专区IT爱车族旅游天下站务交流版主会议室博客SNS站务交流区CU活动专区& & & Power活动专区& & & 拍卖交流区频道交流区
空间积分0 信誉积分332 UID7283003阅读权限50积分4269帖子精华可用积分4269 专家积分140 在线时间2724 小时注册时间最后登录
小富即安, 积分 4269, 距离下一级还需 731 积分
帖子主题精华可用积分4269 专家积分140 在线时间2724 小时注册时间最后登录
论坛徽章:0
安装平台...wind0ws2003sp2
同一主机,两台主机方式安装成功
15:00 上传
下载次数: 104
446.94 KB, 下载次数: 104
whill9.0New1
15:00 上传
下载次数: 83
140.91 KB, 下载次数: 83
whill9.0New1
&&nbsp|&&nbsp&&nbsp|&&nbsp&&nbsp|&&nbsp&&nbsp|&&nbsp
空间积分0 信誉积分225 UID阅读权限50积分2836帖子精华可用积分2836 专家积分126 在线时间609 小时注册时间最后登录
小富即安, 积分 2836, 距离下一级还需 2164 积分
帖子主题精华可用积分2836 专家积分126 在线时间609 小时注册时间最后登录
论坛徽章:0
看个pdf真不容易啊 。。。这里咋还要小太阳人的字体
归隐~深埋50米~
空间积分0 信誉积分332 UID7283003阅读权限50积分4269帖子精华可用积分4269 专家积分140 在线时间2724 小时注册时间最后登录
小富即安, 积分 4269, 距离下一级还需 731 积分
帖子主题精华可用积分4269 专家积分140 在线时间2724 小时注册时间最后登录
论坛徽章:0
近期准备培训相关内容......
不过这种环境安装真是复杂
空间积分0 信誉积分0 UID8315717阅读权限10积分45帖子精华可用积分45 专家积分0 在线时间0 小时注册时间最后登录
白手起家, 积分 45, 距离下一级还需 155 积分
帖子主题精华可用积分45 专家积分0 在线时间0 小时注册时间最后登录
论坛徽章:0
是安装文档吗,刚接触8.0,也了解下9
空间积分0 信誉积分0 UID阅读权限10积分1帖子精华可用积分1 专家积分0 在线时间0 小时注册时间最后登录
白手起家, 积分 1, 距离下一级还需 199 积分
帖子主题精华可用积分1 专家积分0 在线时间0 小时注册时间最后登录
论坛徽章:0
windows 2003 ,sql 2005 上装出现问题:
出现sql server dns 主机等问题。 谁装成功过!介绍一下!
空间积分0 信誉积分332 UID7283003阅读权限50积分4269帖子精华可用积分4269 专家积分140 在线时间2724 小时注册时间最后登录
小富即安, 积分 4269, 距离下一级还需 731 积分
帖子主题精华可用积分4269 专家积分140 在线时间2724 小时注册时间最后登录
论坛徽章:0
你是分离安装还是一台机器安装。。。
如果没有DNS服务器,要在本地lmhosts注解。
服务器名使用域名方式,比如*.domainname
安装时将SQL字典选择什么?
北京皓辰网域网络信息技术有限公司. 版权所有 京ICP证:060528号 北京市公安局海淀分局网监中心备案编号:
广播电视节目制作经营许可证(京) 字第1234号
中国互联网协会会员&&联系我们:
感谢所有关心和支持过ChinaUnix的朋友们
转载本站内容请注明原作者名及出处public class Connector : Control, INotifyPropertyChanged {
public Point Position
get { return }
if (position != value)
position =
OnPropertyChanged("Position");
public Connector()
// fired when layout changes
base.LayoutUpdated += new EventHandler(Connector_LayoutUpdated);
void Connector_LayoutUpdated(object sender, EventArgs e)
DesignerCanvas designer = GetDesignerCanvas(this);
if (designer != null)
//get center position of this Connector relative to the DesignerCanvas
this.Position = this.TransformToAncestor(designer).Transform
(new Point(this.Width / 2, this.Height / 2));
连接点装饰模板 ConnectorDecoratorTemplate
DesignerItem的样式文件中包含了连接点控件如下:
&Style TargetType="{x:Type s:DesignerItem}"&
&Setter Property="Template"&
&Setter.Value&
&ControlTemplate TargetType="{x:Type s:DesignerItem}"&
&Grid DataContext="{Binding RelativeSource={RelativeSource TemplatedParent}}"&&
&ContentPresenter&/&
&Control x:Name="PART_ConnectorDecorator" Visibility="Hidden"
Template="{StaticResource ConnectorDecoratorTemplate}"/&
&ControlTemplate.Triggers&
&Trigger Property="IsMouseOver" Value="true"&
&Setter TargetName="PART_ConnectorDecorator" Property="Visibility"           Value="Visible"/&
&/Trigger&
&/ControlTemplate.Triggers&
&/ControlTemplate&
&/Setter.Value&
连接点控件样式如下:
&ControlTemplate x:Key="ConnectorDecoratorTemplate" TargetType="{x:Type Control}"&
&Grid Margin="-5"&
&s:Connector Orientation="Left" VerticalAlignment="Center"
HorizontalAlignment="Left"/&
&s:Connector Orientation="Top" VerticalAlignment="Top"
HorizontalAlignment="Center"/&
&s:Connector Orientation="Right" VerticalAlignment="Center"
HorizontalAlignment="Right"/&
&s:Connector Orientation="Bottom" VerticalAlignment="Bottom"
HorizontalAlignment="Center"/&
&/Grid& &/ControlTemplate&
连接Connection
两个连接点之间连线后生成连接对象Connection,Connection有两个属性Source和Sink,分别代码源Connector和目的Connector,当这两个Connector的Position改变时会通知Connection调用UpdatePathGeometry算法来更新连接线路径。
Connection的代码如下:
public class Connection : Control, ISelectable, INotifyPropertyChanged
public Connector Source
if (source != value)
if (source != null)
source.PropertyChanged -=
new PropertyChangedEventHandler(OnConnectorPositionChanged);
source.Connections.Remove(this);
if (source != null)
source.Connections.Add(this);
source.PropertyChanged +=
new PropertyChangedEventHandler(OnConnectorPositionChanged);
UpdatePathGeometry();
void OnConnectorPositionChanged(object sender, PropertyChangedEventArgs e)
if (e.PropertyName.Equals("Position"))
UpdatePathGeometry();
定制化连接点布局
ConnectorDecoratorTemplate
有时缺省的四个连接点可能并不是我们所需要的,如一个三角形DesignerItem的定义如下:
&Path IsHitTestVisible="False"
Fill="Orange"
Stretch="Fill"
Data="M 0,10 5,0 10,10 Z"&
&s:DesignerItem.DragThumbTemplate&
&ControlTemplate&
&Path Fill="Transparent" Stretch="Fill"
Data="M 0,10 5,0 10,10 Z"/&
&/ControlTemplate&
&/s:DesignerItem.DragThumbTemplate& &/Path&
这个三角形显示的默认连接点如下图左边所示,但是我们需要的是下面所示的连接点,那么我们是如何定制化连接点布局的呢?
设计器通过DesignerItem的附加属性DesignerItem.ConnectorDecoratorTemplate来让我们自定义连接点装饰模板,为了定义出上图右边所示的连接点,我们可以修改三角形的定义如下:
&Path IsHitTestVisible="False"
Fill="Orange"
Stretch="Fill"
Data="M 0,10 5,0 10,10 Z"&
&!-- Custom DragThumb Template --&
&s:DesignerItem.DragThumbTemplate&
&ControlTemplate&
&Path Fill="Transparent" Stretch="Fill"
Data="M 0,10 5,0 10,10 Z"/&
&/ControlTemplate&
&s:DesignerItem.DragThumbTemplate&
&!-- Custom ConnectorDecorator Template --&
&s:DesignerItem.ConnectorDecoratorTemplate&
&ControlTemplate&
&Grid Margin="0"&
&s:Connector Orientation="Top" HorizontalAlignment="Center"
VerticalAlignment="Top" /&
&s:Connector Orientation="Bottom"
HorizontalAlignment="Center"
VerticalAlignment="Bottom" /&
&UniformGrid Columns="2"&
&s:Connector Grid.Column="0" Orientation="Left" /&
&s:Connector Grid.Column="1" Orientation="Right"/&
&/UniformGrid&
&/ControlTemplate&
&/s:DesignerItem.ConnectorDecoratorTemplate& &/Path&
RelativePositionPanel和RelativePositionPanel.RelativePosition
以上三角形的连接点属于比较规格的图形,有时候遇到不规则图形时可能就比较难按照上面这种布局方式去设计了,于是我们设计了一个处理相对位置布局的一个RelativePositionPanel&,并给Connector 加了一个附加属性RelativePositionPanel.RelativePosition来处理使用相对位置来设置连接点的情况。
以下为定义五角星的示例:
上图五角星的定义如下:&
&Path IsHitTestVisible="False"
Fill="Orange"
Stretch="Fill"
Data="M 9,2 11,7 17,7 12,10 14,15 9,12 4,15 6,10 1,7 7,7 Z"&
&!-- Custom DragThumb Template --&
&s:DesignerItem.DragThumbTemplate&
&ControlTemplate&
&Path Fill="Transparent" Stretch="Fill"
Data="M 9,2 11,7 17,7 12,10 14,15 9,12 4,15 6,10 1,7 7,7 Z"/&
&/ControlTemplate&
&/s:DesignerItem.DragThumbTemplate&
&!-- Custom ConnectorDecorator Template --&
&s:DesignerItem.ConnectorDecoratorTemplate&
&ControlTemplate&
&c:RelativePositionPanel Margin="-4"&
&s:Connector Orientation="Top"
c:RelativePositionPanel.RelativePosition="0.5,0"/&
&s:Connector Orientation="Left"
c:RelativePositionPanel.RelativePosition="0,0.385"/&
&s:Connector Orientation="Right"
c:RelativePositionPanel.RelativePosition="1,0.385"/&
&s:Connector Orientation="Bottom"
c:RelativePositionPanel.RelativePosition="0.185,1"/&
&s:Connector Orientation="Bottom"
c:RelativePositionPanel.RelativePosition="0.815,1"/&
&/c:RelativePositionPanel&
&/ControlTemplate&
&/s:DesignerItem.ConnectorDecoratorTemplate& &/Path&
MetaModelEngine将增加一种布局方式:按绝对位置布局连接点
欢迎转载,转载请注明:转载自 [}

我要回帖

更多关于 json对象增加属性 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信