Javascript原型,对象,构造函数?我很困惑
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Javascript原型,对象,构造函数?我很困惑,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3400字,纯文字阅读大概需要5分钟。
内容图文
![Javascript原型,对象,构造函数?我很困惑](/upload/InfoBanner/zyjiaocheng/756/49a2c93b10824d42830e655faf61d350.jpg)
我已经经历了大量有描述的Stack Overflow问题,但我认真地发现它们非常令人困惑.我想要的是一个简单的解释,请不要参考链接.
我完全糊涂了,完全混淆了:
>原型,
>物体,
>构造函数
我做了很多研究,但发现它们非常复杂.
任何简单的解释?
解决方法:
你很幸运.有一个非常简单的解释:
第一步:创建一个对象
假设你想要圈:
var circle = {};
第二步:给它一些属性
可以绘制一个圆,所以让我们创建一个名为draw的属性:
circle.draw = function () {
// drawing logic
};
>属性只是属于对象的变量.变量本身不是属性.
>属性和变量可以包含任何类型的数据. JavaScript中的函数是数据.
>当一个属性持有一个函数时,它被称为一个方法.
因此,我们有一个名为draw的方法属于对象圈.
第三步:扩展对象
现在我想要一个球,一个球就像一个圆圈.所以让我们扩展圆圈来创造一个球:
var ball = Object.create(circle);
>这里我们采用了对象圈并用它来创建一个名为ball的新对象.
>对象球现在具有圆的所有属性.所以我们可以调用ball.draw.
>对象圈是球的原型.
第四步:给它一些属性
每个球都有一个半径,所以让我们给我们一个:
ball.radius = 5;
第五步:创建一个构造函数
这里有一个问题.每当我想要创建一个新球时,我会延伸圆圈并手动定义球的半径.相反,我想要一个创建球的功能,并给我一个半径.此函数称为构造函数:
function createBall(radius) {
var ball = Object.create(circle);
ball.radius = radius;
return ball;
}
var baseball = createBall(5);
var basketball = createBall(10);
baseball.draw();
basketball.draw();
关于原型,对象和构造函数,您几乎需要了解这一切.
当然还有更多的解释,但对于一个StackOverflow答案来说太过分了.我写了一篇博文,我不打算在这里改写同样的东西.你应该阅读我的博客.这是值得的:http://aaditmshah.github.io/why-prototypal-inheritance-matters
编辑:当然,我将解释该代码中发生的事情:http://cssdeck.com/labs/4ksohwya
首先,向下滚动到最后:
window.addEventListener(
'load',
init(null),
false);
当页面加载时,它执行init:
function init(images) {
canvas= document.getElementById('s');
ctx= canvas.getContext('2d');
canvas.width= window.innerWidth;
canvas.height=window.innerHeight;
garden= new Garden();
garden.initialize(canvas.width, canvas.height, 300);
lerp(0,2000);
time= new Date().getTime();
interval = setInterval(_doit, 30);
}
init函数创建Garden的实例(garden = new Garden();)并执行garden的初始化方法.它还以30毫秒的间隔调用_doit函数.
initialize : function(width, height, size) {
this.width= width;
this.height= height;
this.grass= [];
for(var i=0; i<size; i++ ) {
var g= new Grass();
g.initialize(
width,
height,
50, // min grass height
height*2/3, // max grass height
20, // grass max initial random angle
40 // max random angle for animation
);
this.grass.push(g);
}
this.stars= [];
for( i=0; i<this.num_stars; i++ ) {
this.stars.push( Math.floor( Math.random()*(width-10)+5 ) );
this.stars.push( Math.floor( Math.random()*(height-10)+5 ) );
}
},
然后,garden的initialize方法创建了Grass的一些实例,调用它们的初始化方法并将它们存储在数组中.
function _doit() {
ctx.fillStyle= gradient;
ctx.fillRect(0,0,canvas.width,canvas.height);
var ntime= new Date().getTime();
var elapsed= ntime-time;
garden.paint( ctx, elapsed );
// lerp.
if ( elapsed>nextLerpTime ) {
lerpindex= Math.floor((elapsed-nextLerpTime)/nextLerpTime);
if ( (elapsed-nextLerpTime)%nextLerpTime<lerpTime ) {
lerp( (elapsed-nextLerpTime)%nextLerpTime, lerpTime );
}
}
}
_doit函数调用garden的paint函数,garden的paint函数调用每个grass的paint函数.
所以这里有两个构造函数:
>草
>花园
以下是两个原型:
> Grass.prototype
> Garden.prototype
在init函数中,我们创建了一个Garden实例(这是一个对象):
var garden= new Garden();
在garden的初始化方法中,我们创建了Grass的多个实例:
var g= new Grass();
而已.
内容总结
以上是互联网集市为您收集整理的Javascript原型,对象,构造函数?我很困惑全部内容,希望文章能够帮你解决Javascript原型,对象,构造函数?我很困惑所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。