Javascript 更改功能的值还是与原型保持相同?

Javascript 更改功能的值还是与原型保持相同?,javascript,function,object,parameters,arguments,Javascript,Function,Object,Parameters,Arguments,如果设置了参数而未设置参数,如何更改对象的值 例如: //parameter is a object var Main = function(parameter) { this.num = 1; this.string = "this" } Main.prototype.constructor = Main; //source is an object Main.prototype.copy = function(source) { Main.prototype.co

如果设置了参数而未设置参数,如何更改对象的值

例如:

//parameter is a object
var Main = function(parameter)
{
    this.num = 1;
    this.string = "this"
}

Main.prototype.constructor = Main;

//source is an object
Main.prototype.copy = function(source)
{
    Main.prototype.copy.call(this, source);

    this.num = source.num;
    this.string = source.string;


    return this;
}

//set sub2 to have num is 4 instead of 1
var sub2 = new Main({num:4});
我想知道如何设置一个原型,如果一个参数是et,它可以允许对原始对象进行更改,但是如果一个参数没有设置,我会使用主函数的默认值,或者如果一个参数为空,我会使用函数将值设置为默认值,如果参数为空,然后设置为参数对象吗


谢谢

唯一的区别在于命名法:

//如果将对象声明为
var obj1={param1:“value1”};
//如果你把它声明为
var obj2=新对象({param2:“value2”});
//这是因为每个对象都继承自对象,
//无论定义了哪种方式。
//试验
控制台日志(obj1类型);
控制台日志(obj2类型);
console.log(对象的obj1实例);
console.log(对象的obj2实例);
//对你的评论的反应如下:
//它既复杂又令人困惑。在本例中,您是'var obj={}'
//创建对象和花括号可分隔对象定义。
//但在本例中,您创建的是'var obj2=function(){}'
//花括号表示“代码块”,而不是对象文字。
//但是。。。函数也是对象。。。
var myFunction=function(){};
log(对象的myFunction实例);
//虽然这个'var obj=function(){para:1}'是有效的,但没有意义
//代码,此'var obj=function(){this.para:1}'与
//以及常用的表达式来创建。。。对象但反对

//另一种感觉。。。这真的很让人困惑。
我花了一段时间才弄明白,我决定查看三个js代码,看看属性是如何设置的,我发现要设置属性,我需要遍历对象,获取对象的键并设置对象的键:下面是一个创建行星的示例

    /* parameters = {
    radius : <float>
    tilt : <float>
    distance : <float>
    days : <float>
    years : <float>
    diffuse : <texture>
    specular : <texture>
    normal : <texture>
    bump : <texture>
}
*/
var CelestialObject = function (parameters) {
    var toRadians = 180 / Math.PI;

    this.radius = 1;
    this.tilt = 23.5;
    this.distance = 0;
    this.days = 1;
    this.years = 1;
    this.orbitEccentricity = 0;
    this.diffuse = null;
    this.specular = null;
    this.normal = null;
    this.bump = null;


    var material = new THREE.MeshPhongMaterial();//mesh material
    var geometry = new THREE.SphereGeometry(this.radius, 64, 64);//sphere geometry
    var mesh = new THREE.Mesh(geometry, material);//mesh

    //Apply Textures
    if (this.diffuse = null)
        material.map = this.diffuse;
    else
        material.color = new THREE.Color(0x777777);
    if (this.specular = null)
        material.map = this.specular;
    if (this.normal = null)
        material.normalMap = this.diffuse;
    if (this.bump = null)
        material.bumpMap = this.bump;

    //Set Tilt
    this.SetTilt = function () {
        mesh.rotateZ(this.tilt * toRadians);
    }

    //Rotate 
    var Rotate = function (mesh) {

        requestAnimationFrame(Rotate);

        var hoursInDay = 24;
        var angle = (360 / (this.days * hoursInDay)) * toRadians;

        mesh.rotateY(angle);
    }

    //Revolve
    var Revolve = function (mesh) {

        requestAnimationFrame(Revolve);

        var time = new Date().getTime();
        var hoursInYears = this.years * 365 * 24;

        time += 360 / hoursInYears;

        var xPos = Math.cos(time) * this.distance;
        var zPos = Math.sin(time) * this.distance * this.orbitEccentricity;


        mesh.position.set(xPos, 0, zPos);
    }

    //set mesh
    this.setMesh = function (customMesh, meshURL) {
        var jsonLoader = new THREE.JSONLoader();
        if (!customMesh)
            mesh = new THREE.Mesh(new THREE.SphereGeometry(this.radius, 64, 64), new THREE.MeshPhongMaterial({ color: 0x777777 }));//sphere
        else
            mesh = jsonLoader.load(meshURL);
    }

    //set values
     for (var key in parameters) {
            var newValue = parameters[key];
            this[key] = newValue;
     }


    Rotate(mesh);
    Revolve(mesh);

    return this;
};
//create new planets here with different values
var earth = new CelestialObject();//use default parameters
var mars = new CelestialObject({radius:.4,tilt:25,distance:141,days:1.5,years:2});//uses new parameters
/*参数={
半径:
倾斜:
距离:
天:
年:
弥漫的:
镜面反射:
正常:
碰撞:
}
*/
var CelestialObject=函数(参数){
var toRadians=180/Math.PI;
这个半径=1;
这个倾斜=23.5;
这个距离=0;
这1.5天=1;
这1.5年=1;
该偏心率=0;
this.diffuse=null;
this.specular=null;
this.normal=null;
this.bump=null;
var material=new THREE.MeshPhongMaterial();//网格材质
var geometry=new THREE.SphereGeometry(this.radius,64,64);//球体几何
var mesh=新的三个网格(几何体、材质);//网格
//应用纹理
如果(this.diffuse=null)
material.map=this.diffuse;
其他的
material.color=新的三种颜色(0x777777);
如果(this.specular=null)
material.map=this.specular;
如果(this.normal=null)
material.normalMap=this.diffuse;
如果(this.bump=null)
material.bumpMap=this.bump;
//倾斜
this.SetTilt=函数(){
网格旋转(this.tilt*toRadians);
}
//轮换
变量旋转=函数(网格){
请求动画帧(旋转);
var hoursInDay=24;
var角=(360/(this.days*hoursInDay))*toRadians;
网格旋转(角度);
}
//旋转
变量旋转=函数(网格){
请求动画帧(旋转);
var time=new Date().getTime();
var Hoursineyears=这个。年*365*24;
时间+=360/小时/耳;
var xPos=Math.cos(时间)*this.distance;
var zPos=数学sin(时间)*this.distance*this.Orbitation;
网格位置设置(xPos,0,zPos);
}
//设置网格
this.setMesh=函数(customMesh、meshURL){
var jsonLoader=new THREE.jsonLoader();
如果(!customMesh)
mesh=new THREE.mesh(new THREE.SphereGeometry(this.radius,64,64),new THREE.MeshPhongMaterial({color:0x777777}));//球体
其他的
mesh=jsonLoader.load(meshURL);
}
//设定值
for(变量输入参数){
var newValue=参数[键];
此[键]=新值;
}
旋转(网格);
旋转(网格);
归还这个;
};
//在此创建具有不同值的新行星
var earth=新的CelestialObject()//使用默认参数
var mars=新的天体对象({半径:4,倾斜:25,距离:141,天数:1.5,年份:2})//使用新参数

请显示实际代码
var object=new object…
将始终导致类型错误。这只是一个示例,实际代码来自三个js,您可以在其中声明要更改的参数,例如在创建材质时,您可以var mat1=new three.MeshPhongMaterial({color:0xffffff});那么你问的是构造函数参数的
color
属性和
mat1.color
属性之间的区别是什么?具体来说,我问的是什么类型的函数可以这样声明一个参数,以便在不必填写所有参数的情况下更改每个新对象的属性我现在知道它是什么了一个以对象作为参数的原型,但如果设置了参数,而没有参数,我不知道如何更改对象的值,因此如果将对象声明为var obj=function(){para:1},这将不起作用?抱歉,我的意思不对;原件:var obj={para:1};或var obj=函数();然后创建一个新的obj:var newObj=newObj({para:1)};?我说的是最后一个,特别是参数可以这样改变的地方,它是第一个obj类型还是第二个是函数;var a=20;控制台,日志(a)“”。控制台日志返回20。因为在第二步中,您刚刚重新定义了变量a。当然,您的newObj将是第二种类型的对象(函数),因为在前面的语句中您刚刚重新定义了变量obj。我不明白您的意思,这个对象的主要用途是什么。你能给我写一个使用这个物体的例子吗