为什么我不能使用原型将属性绑定到对象?

时间:2012-02-23 11:49:21

标签: javascript

我有脚本......

 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?

4 个答案:

答案 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