function label () {
this.dd=0;
this.ss='';
}
label.prototype.schema= {
"name": '哈哈',
"age": "13",
"id": 1 ,
"rank":12
}
label.prototype.getRank=function (t) {
var temp=0;
if(t.schema.hasOwnProperty("rank")){
temp=t.schema.rank;
}
return temp;
}
//实例
var labelObj=new label();
console.log(labelObj.getRank(labelObj))
label.prototype.schema 改写成 label.schema会有影响吗,什么情况下由于影响, 怎么决定我用那种写法?
getRank()中可不可以不传参来完成 获取rank?
getRank()这个函数 怎么写才看起来更高效 更优雅?
在我编写的过程中,需要对实例化的对象进行大量的赋值、传值、取值,是我设计的有问题吗,感觉总是怪怪的,
还是本身不太适用原型来操作?
如果初始构造里同时也有getrank()
function label () {
this.dd=0;
this.ss='';
this.rank=function(){
...
}
}
执行哪个(原型中的?构造函数中的?) 如何执行另外一个不执行的getrank()?
有没有相关推荐的书籍?
我写过的js文件 没人review ,不知道现在自己究竟哪些地方需要提高,希望大家不吝赐教,多多支出我的不足 !
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
1 label.prototype.schema 改写成 label.prototype 会有影响吗?
改了以后 先是这样 label.prototype = schema:{} 然后在label.prototype.getRank = function(){}
相当于
2 可以啊 this.schema.rank 就可以啊
3 return this.schema.hasOwnProperty("rank") ? this.schema.rank : ''; 这样可以么?
我感觉也有点怪怪的 关键是不知道具体的需求是什么样的
问题1: label.prototype.schema 改写成 label.prototype 会有影响吗,什么情况下由于影响, 怎么决定我用那种写法?
label.prototype.schema这种写法保证了 label.prototype还是指向label本身,而label.prototype={}使得label的原型指向了Object的实例化对象,改变了当前原型对象,不建议这种写法,影响嘛前者的constructor属性指向label本身,而label.prototype={}的constructor属性指向Object,导致原型对象不清楚,后面写法最好不要写,虽然从运行来看也不会导致什么问题或者我能力有限没有发现。
问题2 :getRank()中可不可以不传参来完成 获取rank?
可以,getRank可以这么修改:
问题3 :getRank()这个函数 怎么写才看起来更高效 更优雅?
基于问题2的代码:
问题4:在我编写的过程中,需要对实例化的对象进行大量的赋值、传值、取值,是我设计的有问题吗,感觉总是怪怪的, 还是本身不太适用原型来操作?
这个问题职责不明确,回答不了
问题5 :执行哪个(原型中的?构造函数中的?) 如何执行另外一个不执行的getrank()?
如果你在函数内部特添加了getRank方法,这是生成实例化对象时就只当前对象里函数内部的getRank方法,而不执行原型上getRank方法,这涉及到一个原型链的问题,因为当你生成实例化对象后,在对象上调用getRank方法,js引擎会在当前对象的属性上查找getRank方法,如果没有则会向的原型对象上查找,即label.prototype上查找,如果再查找不到,即会到Object.prototype上查找,直到查到不到为止,而在当前对象属性上有getRank方法,所以不会再去往他的原型对象上查找了,可以去看下js的原型链
时间有限
建议看看《JavaScript高级程序设计》这本书,里面介绍的很清楚、详细。
一系列问题机关枪扫射过来
其实你的问题大部分在SF上都可以找到、建议多补补JS的面向对象、百度不到了再拿来问吧