我有脚本......
var MyClass = {
someText: 'Hello World'
};
jQuery(document).ready(function () {
console.log(MyClass.someText);
MyClass.prototype.someText = 'proto Hello World';
console.log(MyClass.someText);
});
但我得到一个例外,说......
Microsoft JScript runtime error: `MyClass.prototype is null or not an object`
但是当我读到关于原型时,它说它可用于所有物体的实例,但上述似乎反驳了这一点。 Whagwan?
答案 0 :(得分:4)
为什么我的javascript不起作用?
因为您不了解原型的工作原理。函数定义原型,对象继承。
var MyClass = function () { };
MyClass.someText = 'Hello World';
MyClass.prototype.someText = 'proto Hello World';
要获取继承原型属性或方法的对象,需要创建一个实例:
var myInstance = new MyClass();
console.log(myInstance.someText);
您还可以使用ES 5方法Object.create()
创建具有特定内部 [[Prototype]] 的对象:
var myObj = Object.create({someText: 'proto Hello World'});
console.log(myObj.someText);
答案 1 :(得分:1)
如果你像这样创建MyClass对象:
var MyClass = function() {};
然后自动创建原型。
答案 2 :(得分:0)
试试这个
var MyClass = { someText:' Hello World' };
jQuery(document).ready(function(){
console.log(MyClass.someText);
MyClass.someText = 'proto Hello World';
console.log(MyClass.someText);
});
或
var MyClass = function () { };
MyClass.someText = 'Hello World';
MyClass.prototype.someText = 'proto Hello World';
答案 3 :(得分:0)
在这个实例中你不需要.prototype:
var MyClass = { someText: 'Hello World' };
alert (MyClass.someText);
MyClass.someText = 'proto Hello World';
alert (MyClass.someText);
将提醒“Hello World”和“proto Hello World”
编辑:我想跟进一些有用的信息 - 不是真的超级新,但也许这将有助于成功的人。一些背景:http://ejohn.org/blog/simple-class-instantiation/
工作示例:http://jsfiddle.net/MarkSchultheiss/4GZha/#base
// makeClass - By John Resig (MIT Licensed)
function makeClass() {
return function(args) {
if (this instanceof arguments.callee) {
if (typeof this.init == "function") this.init.apply(this, args.callee ? args : arguments);
} else return new arguments.callee(arguments);
};
}
var MyClass = makeClass();
MyClass.prototype.init = function(newText, newThing) {
this.someText = newText == undefined ? 'defaultText' : newText;
this.newThing = newThing == undefined ? 'defaultThing' : newThing ;
;
this.gobble = 'turkey';
this.cracker = 'cheese';
}
MyClass.prototype.otherText = 'otherstuff';
var trustme = MyClass('trustmedude');
alert(trustme.someText +":"+ trustme.newThing);
var iam = MyClass('some new text', 'mything');
alert("tmething "+trustme.newThing);
alert(iam.someText); //returns "some new text"
iam.someText = 'hi fred';
alert(iam.someText); //returns "some ne text"
alert(iam.otherText); // returns "otherstuff"
alert(iam.newThing); //returns "mything"
alert(MyClass.someText); //returns undefined
alert(MyClass.otherText); //returns undefined
alert(iam.cracker + iam.gobble); //returns "cheeseturkey"
alert(iam.hasOwnProperty("someText")); //returns true