对象的name成员是内置无法更改吗?
发布于 8 年前 作者 pleasenter 3309 次浏览 来自 问答

谁帮我看看这个代码怎么回事,name做成员就不行,Name就可以 //创建类的函数,用于声明类及继承关系 function Class(aBaseClass, aClassDefine) { //创建类的临时函数壳 function class_() { this.Type = aBaseClass; //我们给每一个类约定一个Type属性,引用其继承的类 for (var member in aClassDefine) this[member] = aClassDefine[member]; //复制类的全部定义到当前创建的类 }; class_.prototype = aBaseClass; return new class_(); }; //创建对象的函数,用于任意类的对象创建 function New(aClass, aParams) { //创建对象的临时函数壳 function new_() { this.Type = aClass; //我们也给每一个对象约定一个Type属性,据此可以访问到对象所属的类 if (aClass.init) aClass.init.apply(this, aParams); //我们约定所有类的构造函数都叫init,这和DELPHI比较相似 }; new_.prototype = aClass; return new new_(); };

var User = Class(Object, { init: function(name, age) { this.Name = name; this.name = name; this.age = 20; },

test: function(p1, p2) {
	this.p1 = p2;
	this.p2 = p1;
	return p1 + p2;
}

});

var SuperUser = Class(User, { init: function(name) { // SuperUser.Super.call(this, name); User.init.call(this, name); },

test: function(p1, p2) {
	// var result = SuperUser.Super.prototype.test.call(this, p1, p2);
	var result = User.test.call(this, p1, p2);
	return result.length;
},

});

// var Usertest=SuperUser.Super.prototype.test;

var SSUser = Class(SuperUser, { init: function(name) { // SSUser.Super.call(this, name); SuperUser.init.call(this, name); }, test: function(p1, p2, p3) { // var result = SSUser.Super.prototype.test.call(this, p1, p2); var result = SuperUser.test.call(this, p1, p2); return result - p3.length; }, });

var u1 = New(SuperUser,[‘Alice’, ‘26’]); console.log(u1.test(‘xxxx’, ‘yyyy’)); console.log(u1.Name); console.log(u1.name);

在nodejs里运行,u1.Name是对的,u1.name就变成object了。 不太明白,name应该不是内置的,怎么会这样呢?

1 回复

我没看你这堆奇怪的代码, function A(){ } 在js里 A.name 的writable 为 false,不可写。

回到顶部