如果我创建一个这样的类:
function MyClass(input){
// construct something;
var myInstanceName = ???
}
Run Code Online (Sandbox Code Playgroud)
创建实例时我需要实例的名称......
var MyInstance = new MyClass("做点什么");
需要知道 myInstanceName(在本例中为“MyInstance”),因为有一个创建按钮的方法,并且“onclick”必须调用该实例的方法。
我尝试了“this.name”,但它返回未定义...我如何获取这个值?
编辑:这是一个经过测试的工作示例:
function MyClass(WhereGoesTheButton){
this.myName = "Test"; // <-- here is the issue
this.idButton = WhereGoesTheButton;
//
}
MyClass.prototype.createButton = function(){
document.getElementById(this.idButton).innerHTML = '<button id="myId" onclick="'+this.myName+'.callBack(this);">Press Here</button>';
}
MyClass.prototype.callBack = function(who){
alert("Button "+who.id+" has been pressed!");
}
var Test = new MyClass("testArea");
//
function ini(){
Test.createButton();
}
Run Code Online (Sandbox Code Playgroud)
只需将其放在带有 body onload ini() 和一些 div 的页面中即可创建按钮。
它有效,但欢迎有更好实践的替代方案!
编辑2:这将完成这项工作,尽管我们仍然没有实例的名称:
var MyClassId = 0;
function …Run Code Online (Sandbox Code Playgroud) 我有一个字符串方法String.prototype.splitName(),可以将作者的姓名(字符串)拆分为名字和姓氏。该语句 返回一个带有and (具有字符串值的属性)的var name = authorName.splitname();对象文字。namename.first = "..."name.last = "..."name
最近有人告诉我,将其作为公共splitName()String() 类的方法是不明智的,但我应该创建String 的私有子类并使用我的函数扩展该子类(而不是公共类)。我的问题是:如何对字符串执行子类化,以便在分配给新子类后仍然是有效的语句?我将如何分配给 String 的新私有子类?authorNamename = authorName.splitname();authorName
编辑:感谢@Aadit M Shah 的确认。
function Apple () {}
Apple.someVar = null; // Class variable
Apple.prototype.someVar = null; // Instance variable
Run Code Online (Sandbox Code Playgroud) javascript class instance-variables instance class-variables
我目前正在研究 Apple 的 Metal API,但我无法理解如何实现渲染大量实例,因为每个实例都需要有自己的(部分)缓冲区。
假设我想绘制大约 50,000 个模型实例(我承认这相当荒谬)。每个实例都将其定位和骨骼动画数据存储在缓冲区中,假设每个实例 50 个关节。现在考虑到最多可以同时渲染三个帧,我需要这些实例缓冲区乘以帧数。
这将导致相当可笑的缓冲区大小,仅用于绘制实例。另外,如果当前实例无法容纳所有要渲染的对象的数据,应该如何实现不同数量的实例,分配更大的缓冲区?只需决定每帧的最大实例数?
我研究过的所有文章和教程似乎都表明:场景中存在最大数量的对象。
(特别是就它们在“正常使用”下的行为而言,在内部我认为它们很可能以不同的方式实现)
以这两个类为例:
class A:
d = 4
class A:
def __init__(self, d=4):
self.d = d
Run Code Online (Sandbox Code Playgroud)
无论您选择哪个版本,当您运行以下代码时,您都会得到相同的结果:
a2 = A()
a = A()
print(a.d) # 4
a.d = 2
print(a.d) # 2
print(a2.d) # 4
Run Code Online (Sandbox Code Playgroud)
读完后我想到了这个问题:
在撰写本文时,我目前正在学习/使用 Python 3.10.2 中的课程。我想要实现的是创建一个类实例,它是另一个类中的属性。
这是我一直在编写的一些代码,以帮助证明我的观点。
class Vehicle():
"""To model a basic vehicle"""
def __init__(self, name, max_speed, millage):
"""Initiate class variables"""
self.name = name
self.max_speed = max_speed
self.millage = millage
self.tyre = Tyre()
def vehicle_details(self):
"""display vehicle details"""
return f"\nName: {self.name.title()}, Max speed: {self.max_speed}MPH, Millage: {self.millage} "
class Tyre():
"""A class specific for vehicle tyres"""
def __init__(self, size=16, pressure=36):
self.size = size
self.pressure = pressure
def tyre_details(self):
"""Print tyre details."""
print(f'Tyre size: {self.size} inches.')
print(f"Tyre pressure {self.pressure} PSI.")
Run Code Online (Sandbox Code Playgroud)
在Vehicle课堂上,我添加了 …
我写了一个很好的小应用程序,获取雅虎天气信息并将其发布到Twitter.它完美无瑕地工作,现在我想将代码重新排列成不同命名的文件,因此它更有意义.那是我遇到一些问题的时候.
以前,我有一个Class在libtweather.py.这是我的account.它允许我这样做,accountName.parseFeed()并且我将获得解析的Yahoo天气作为输出.(__ini__以天气URL,推特用户名和密码为args)
这是从创建的情况下我的主要脚本访问Class:这样
exec '%s = lw.twitterWeather("%s", "%s", "%s")' % (item[0], item[1], item[2], item[3])
它不停地在其中作为参数传递给其他函数传递一个列表中的所有帐户名称的列表.
另一个功能getWeather是做天气:
def getWeather(accountList): #account names passed as a list of strings
for item in accountList:
print item, ': ',
item = eval(item)
print item.parseFeed(), '\n
Run Code Online (Sandbox Code Playgroud)
我现在决定将该getWeather函数移动到与该文件相同的文件,Class但该行item = eval(item)给我带来了问题,因为该文件中没有创建实例.所有这些都在主脚本中.
现在我的问题是:有什么方法可以将这些实例作为函数的参数给出?或者我必须把功能放入Class?即使我这样做了,我仍然需要为item.parseFeed()列表中的多个项目执行操作,所以我仍然需要item = eval(item),不是吗?
提前致谢.我的应用程序有点在这里完整发布,但如果需要更好地了解我会发布更多代码.
更新:libtweather.py当我导入实例时,我最终运行我创建实例,以便其中的函数可以访问它们(添加了脚本底部的实例生成代码).我确信有更好的方法,但它目前适用于我,我很好.
我无法按照正确的方式遵循AngelScript手册来注册类对象并将类的特定实例传递给脚本.假设我有一个C++类Circle,我想让他知道AngelScript.
class Circle
{
public:
int getArea();
int radius;
};
Run Code Online (Sandbox Code Playgroud)
从这里开始,我想创建一个Circle类的实例,将getArea()方法注册到AngelScript引擎(或者如果可能的话,自动注册类中的所有方法),并将类实例本身传递给AngelScript环境.
Circle circleInstance;
circleInstance.radius = 10;
// Initialize AngelScript engine
asIScriptEngine *engine = asCreateScriptEngine(ANGELSCRIPT_VERSION);
engine->RegisterObjectMethod("Circle", "int getArea()",
asMETHOD(Circle, getArea), asCALL_THISCALL);
Run Code Online (Sandbox Code Playgroud)
在AngelScript中,我希望能够从实例变量中调用该方法并返回C++函数的结果.
circleInstance.getArea();
Run Code Online (Sandbox Code Playgroud)
但是,在上面的代码中,我显然没有circleInstance以任何方式将实例传递给AngelScript引擎,因此脚本环境不知道它的存在.我假设我忽略了一些东西,答案只有一两行C++.如果我注册Circle过等的方法类RegisterObjectType或者RegisterInterface,我需要让Circle继承asIScriptObject这个工作?任何见解都表示赞赏!
我声明我的数据是这样的:
data Op = Plus | Minus | Mul | Div | Pow
deriving (Eq, Show)
type Name = String
data Variable a = Variable Name (Expression a)
deriving (Eq, Show)
data Declaration a = Declaration (Variable a)
deriving (Eq, Show)
{- The core symbolic manipulation type -}
data Expression a =
Number a -- Simple number, such as 5
| Expression Op (Expression a) (Expression a)
deriving (Eq, Show)
Run Code Online (Sandbox Code Playgroud)
在GHCi中,我想通过键入来创建一个声明实例:
Declaration Variable "var1" 2+3
但它不起作用,我想这只是一个错误的语法,但我无法弄清楚如何.
另外我想知道什么时候需要使用实例?这是我从书中得到的代码:
instance Num a …Run Code Online (Sandbox Code Playgroud) 我正在构建一个显示不同片段的应用程序ViewPager.我将这些片段添加到ViewPager这样的:
public void intialiseViewPager()
{
List<Fragment> fragments = new Vector<Fragment>();
numberOfTabs = application.currentReport.getODTabsList().size();
for (int i = 0; i < numberOfTabs; i++)
{
ODTab tempTab = application.currentReport.getODTabsList().get(i);
if (tempTab.getTabType().equals(ODGrid.XML_GRID_ELEMENT))
{
GridFragment gridFragment = GridFragment.newInstance(tempTab.getTabId());
fragments.add(gridFragment);
}
else if (tempTab.getTabType().equals(ODChart.XML_CHART_ELEMENT))
{
NewChartFragment chartFragment = NewChartFragment.newInstance(tempTab.getTabId());
fragments.add(chartFragment);
}
}
Log.d(TAG, "Current report fragments set to adapter: "+fragments.toString());
mPagerAdapter = new ViewPagerAdapter(getSupportFragmentManager(), fragments);
mViewPager = (ViewPager)findViewById(R.id.pager);
mViewPager.setAdapter(mPagerAdapter);
mViewPager.setOffscreenPageLimit(0);
mViewPager.setOnPageChangeListener(this);
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我tempTab.getTabId()在此行中传递了一个String()片段:
GridFragment gridFragment = GridFragment.newInstance(tempTab.getTabId());
Run Code Online (Sandbox Code Playgroud)
在片段本身我这样做来初始化它:
public …Run Code Online (Sandbox Code Playgroud)